)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Supports all minimal required features."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Implements: blueprint nexenta-manila-driver"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"DocImpact"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ib8b8525397626162968458ec837f9239ff5dbb2b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dab17558_1f5e6576","line":13,"updated":"2016-05-12 14:00:07.000000000","message":"Commit message does not say model of storage \"NS5\". But it is expected to be specified.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"}],"doc/source/devref/share_back_ends_feature_support_mapping.rst":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":38,"context_line":"|      Generic (Cinder as back-end)      |           J           |           K           |       L      |       L      |            J           |              J             |            M             |"},{"line_number":39,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":40,"context_line":"|       NetApp Clustered Data ONTAP      |           J           |           L           |       L      |       L      |            J           |              J             |            N             |"},{"line_number":41,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":42,"context_line":"|                 EMC VNX                |           J           |          \\-           |      \\-      |       \\-     |            J           |              J             |            \\-            |"},{"line_number":43,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"}],"source_content_type":"text/x-rst","patch_set":23,"id":"1aa78d24_8ef424f1","line":40,"updated":"2016-07-13 05:39:20.000000000","message":"This line should not be changed in this patch.  It\u0027s probably a rebase error.","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a3e003b7dbc694b1353a3fc25aab4455977225cd","unresolved":false,"context_lines":[{"line_number":37,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":38,"context_line":"|      Generic (Cinder as back-end)      |           J           |           K           |       L      |       L      |            J           |              J             |            M             |"},{"line_number":39,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":40,"context_line":"|                 EMC VNX                |           J           |          \\-           |      \\-      |       \\-     |            J           |              J             |            \\-            |"},{"line_number":41,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":42,"context_line":"|               EMC Isilon               |           K           |          \\-           |       M      |      \\-      |            K           |              K             |            \\-            |"},{"line_number":43,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"}],"source_content_type":"text/x-rst","patch_set":28,"id":"dada55a8_39e0f228","line":40,"updated":"2016-07-27 09:56:46.000000000","message":"Please, return \"NetApp\" line back.","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a004470a0132e4ac405393e7e05f07560af4eeb5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":38,"context_line":"|      Generic (Cinder as back-end)      |           J           |           K           |       L      |       L      |            J           |              J             |            M             |"},{"line_number":39,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":40,"context_line":"|                 EMC VNX                |           J           |          \\-           |      \\-      |       \\-     |            J           |              J             |            \\-            |"},{"line_number":41,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":42,"context_line":"|               EMC Isilon               |           K           |          \\-           |       M      |      \\-      |            K           |              K             |            \\-            |"},{"line_number":43,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"}],"source_content_type":"text/x-rst","patch_set":28,"id":"bacf61ea_c73e43d9","line":40,"in_reply_to":"bacf61ea_824b2e59","updated":"2016-07-30 07:21:45.000000000","message":"Because the patch about netapp manage feature has been merged in Jul 1. If not rebase the patch, it will be happend. link:\nhttps://github.com/openstack/manila/commit/4bac8b64e0c115786e5cce585e4444c624b44404\nhttps://review.openstack.org/#/c/335058/\n\nCould you please see you local branch doc(share_back_ends_feature_support_mapping), and add this line in doc? or you could download new master, and use \"git review -d 309286\" to download your branch, then return \"NetApp\" line back.","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"2149dfc82ec197191b17dac24256938bb1c8cd47","unresolved":false,"context_lines":[{"line_number":37,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":38,"context_line":"|      Generic (Cinder as back-end)      |           J           |           K           |       L      |       L      |            J           |              J             |            M             |"},{"line_number":39,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":40,"context_line":"|                 EMC VNX                |           J           |          \\-           |      \\-      |       \\-     |            J           |              J             |            \\-            |"},{"line_number":41,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":42,"context_line":"|               EMC Isilon               |           K           |          \\-           |       M      |      \\-      |            K           |              K             |            \\-            |"},{"line_number":43,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"}],"source_content_type":"text/x-rst","patch_set":28,"id":"bacf61ea_824b2e59","line":40,"in_reply_to":"dada55a8_39e0f228","updated":"2016-07-27 16:01:49.000000000","message":"sorry, misunderstood what happened here https://review.openstack.org/#/c/309286/23/doc/source/devref/share_back_ends_feature_support_mapping.rst@40","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":75,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":76,"context_line":"|                 Tegile                 |           M           |          \\-           |       M      |       M      |            M           |              M             |            \\-            |"},{"line_number":77,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":78,"context_line":"|                 Nexenta                |           N           |          \\-           |       N      |       N      |            N           |              N             |            \\-            |"},{"line_number":79,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Mapping of share drivers and share access rules support"}],"source_content_type":"text/x-rst","patch_set":36,"id":"fa7ab95a_a7d1d3cf","line":78,"range":{"start_line":78,"start_character":112,"end_line":78,"end_character":113},"updated":"2016-08-26 17:17:27.000000000","message":"The NS4 driver doesn\u0027t support shrink, so this is misleading.  And I assume the drivers will continue to diverge over time.  So it seems you need two rows in each of these tables, similar to GlusterFS.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":75,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":76,"context_line":"|                 Tegile                 |           M           |          \\-           |       M      |       M      |            M           |              M             |            \\-            |"},{"line_number":77,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":78,"context_line":"|                 Nexenta                |           N           |          \\-           |       N      |       N      |            N           |              N             |            \\-            |"},{"line_number":79,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Mapping of share drivers and share access rules support"}],"source_content_type":"text/x-rst","patch_set":36,"id":"fa7ab95a_6ec5df8c","line":78,"range":{"start_line":78,"start_character":112,"end_line":78,"end_character":113},"in_reply_to":"fa7ab95a_a7d1d3cf","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"96faccc648452430908a90f3649eacceb90e8b36","unresolved":false,"context_lines":[{"line_number":33,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":34,"context_line":"|               Driver name              | create delete share   | manage unmanage share | extend share | shrink share | create delete snapshot | create share from snapshot | manage unmanage snapshot |"},{"line_number":35,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":36,"context_line":"|               ZFSonLinux               |           M           |          \\-           |       M      |       M      |            M           |              M             |            \\-            |"},{"line_number":37,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":38,"context_line":"|      Generic (Cinder as back-end)      |           J           |           K           |       L      |       L      |            J           |              J             |            M             |"},{"line_number":39,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"}],"source_content_type":"text/x-rst","patch_set":42,"id":"fa7ab95a_f3d10c31","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":201},"updated":"2016-08-31 08:16:31.000000000","message":"It means like a rebase error, you can not remove other driver\u0027s description.","commit_id":"f56933d7063786550ce0427e92ffa93f22e27378"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"8966faa38377e3daa84d5f8e1055acb02d26d048","unresolved":false,"context_lines":[{"line_number":33,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":34,"context_line":"|               Driver name              | create delete share   | manage unmanage share | extend share | shrink share | create delete snapshot | create share from snapshot | manage unmanage snapshot |"},{"line_number":35,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":36,"context_line":"|               ZFSonLinux               |           M           |          \\-           |       M      |       M      |            M           |              M             |            \\-            |"},{"line_number":37,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":38,"context_line":"|      Generic (Cinder as back-end)      |           J           |           K           |       L      |       L      |            J           |              J             |            M             |"},{"line_number":39,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"}],"source_content_type":"text/x-rst","patch_set":42,"id":"fa7ab95a_0490d694","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":201},"in_reply_to":"fa7ab95a_f3d10c31","updated":"2016-08-31 18:22:47.000000000","message":"this is strange, rebase keeps deleting lines from this file...","commit_id":"f56933d7063786550ce0427e92ffa93f22e27378"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"96faccc648452430908a90f3649eacceb90e8b36","unresolved":false,"context_lines":[{"line_number":39,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":40,"context_line":"|       NetApp Clustered Data ONTAP      |           J           |           L           |       L      |       L      |            J           |              J             |            N             |"},{"line_number":41,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":42,"context_line":"|                 EMC VNX                |           J           |          \\-           |      \\-      |       \\-     |            J           |              J             |            \\-            |"},{"line_number":43,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":44,"context_line":"|               EMC Isilon               |           K           |          \\-           |       M      |      \\-      |            K           |              K             |            \\-            |"},{"line_number":45,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":46,"context_line":"|            Red Hat GlusterFS           |           J           |          \\-           |      \\-      |      \\-      |  volume layout (L)     |  volume layout (L)         |            \\-            |"}],"source_content_type":"text/x-rst","patch_set":42,"id":"fa7ab95a_73e6dc17","line":43,"range":{"start_line":42,"start_character":2,"end_line":43,"end_character":201},"updated":"2016-08-31 08:16:31.000000000","message":"above","commit_id":"f56933d7063786550ce0427e92ffa93f22e27378"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"96faccc648452430908a90f3649eacceb90e8b36","unresolved":false,"context_lines":[{"line_number":49,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":50,"context_line":"|                  HDFS                  |           K           |          \\-           |       M      |      \\-      |            K           |              K             |            \\-            |"},{"line_number":51,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":52,"context_line":"|              Hitachi HNAS              |           L           |           L           |       L      |       M      |            L           |              L             |            \\-            |"},{"line_number":53,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":54,"context_line":"|                HPE 3PAR                |           K           |          \\-           |      \\-      |      \\-      |            K           |              K             |            \\-            |"},{"line_number":55,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":56,"context_line":"|                 Huawei                 |           K           |           L           |       L      |       L      |            K           |              M             |            \\-            |"}],"source_content_type":"text/x-rst","patch_set":42,"id":"fa7ab95a_d3ede8f0","line":53,"range":{"start_line":52,"start_character":1,"end_line":53,"end_character":201},"updated":"2016-08-31 08:16:31.000000000","message":"above","commit_id":"f56933d7063786550ce0427e92ffa93f22e27378"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"96faccc648452430908a90f3649eacceb90e8b36","unresolved":false,"context_lines":[{"line_number":63,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":64,"context_line":"|              Windows SMB               |           L           |           L           |       L      |       L      |            L           |              L             |            \\-            |"},{"line_number":65,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":66,"context_line":"|             Oracle ZFSSA               |           K           |          \\-           |       M      |       M      |            K           |              K             |            \\-            |"},{"line_number":67,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"},{"line_number":68,"context_line":"|             CephFS Native              |           M           |          \\-           |      M       |      M       |            M           |             \\-             |            \\-            |"},{"line_number":69,"context_line":"+----------------------------------------+-----------------------+-----------------------+--------------+--------------+------------------------+----------------------------+--------------------------+"}],"source_content_type":"text/x-rst","patch_set":42,"id":"fa7ab95a_53b8f8e5","line":66,"range":{"start_line":66,"start_character":72,"end_line":66,"end_character":79},"updated":"2016-08-31 08:16:31.000000000","message":"above","commit_id":"f56933d7063786550ce0427e92ffa93f22e27378"}],"manila/exception.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":786,"context_line":""},{"line_number":787,"context_line":"# Nexenta Storage drivers"},{"line_number":788,"context_line":"class NexentaException(ShareBackendException):"},{"line_number":789,"context_line":"    message \u003d _(\"Nexenta backend exception: \""},{"line_number":790,"context_line":"                \"%(response)s\")"},{"line_number":791,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_d7055011","line":790,"range":{"start_line":789,"start_character":0,"end_line":790,"end_character":31},"updated":"2016-05-10 16:16:11.000000000","message":"no need to wrap here","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"34c4ec3cd097d29c5f597fecdb0e5b9a61728c06","unresolved":false,"context_lines":[{"line_number":784,"context_line":"    message \u003d _(\"Could not communicate with storage array.\")"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"# Nexenta Storage drivers"},{"line_number":788,"context_line":"class NexentaException(ShareBackendException):"},{"line_number":789,"context_line":"    message \u003d _(\"Nexenta backend exception: \""},{"line_number":790,"context_line":"                \"%(response)s\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_a9759164","line":790,"range":{"start_line":787,"start_character":0,"end_line":790,"end_character":31},"updated":"2016-05-11 16:26:17.000000000","message":"no need to wrap here","commit_id":"14631960d5ee3f089e615f60e2831f128856aca6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":784,"context_line":"    message \u003d _(\"Could not communicate with storage array.\")"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"class NexentaException(ManilaException):"},{"line_number":788,"context_line":"    message \u003d _(\"Exception due to Nexenta failure.\""},{"line_number":789,"context_line":"                \"%(response)s\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_04f03166","line":787,"updated":"2016-07-06 21:38:26.000000000","message":"Better to inherit from ShareBackendException","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":786,"context_line":""},{"line_number":787,"context_line":"class NexentaException(ManilaException):"},{"line_number":788,"context_line":"    message \u003d _(\"Exception due to Nexenta failure.\""},{"line_number":789,"context_line":"                \"%(response)s\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_243e0dda","line":789,"updated":"2016-07-06 21:38:26.000000000","message":"How about change \"response\" to \"reason\"?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ea21ce6199521ccea6c849bd29bf435a73b6bdf8","unresolved":false,"context_lines":[{"line_number":789,"context_line":""},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"class NexentaException(ManilaException):"},{"line_number":792,"context_line":"    message \u003d _(\"Exception due to Nexenta failure.\""},{"line_number":793,"context_line":"                \"%(reason)s\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_1de543db","line":792,"range":{"start_line":792,"start_character":49,"end_line":792,"end_character":51},"updated":"2016-07-31 01:48:43.000000000","message":"I would add a space here..","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e043be7275b4c347c699079629260c9c19ccb967","unresolved":false,"context_lines":[{"line_number":789,"context_line":""},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"class NexentaException(ManilaException):"},{"line_number":792,"context_line":"    message \u003d _(\"Exception due to Nexenta failure.\""},{"line_number":793,"context_line":"                \"%(reason)s\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_c394338c","line":792,"range":{"start_line":792,"start_character":49,"end_line":792,"end_character":51},"in_reply_to":"bacf61ea_1de543db","updated":"2016-08-02 14:12:41.000000000","message":"Done","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e478c9997e8858ba5caee48731eef72ed6f8b906","unresolved":false,"context_lines":[{"line_number":790,"context_line":""},{"line_number":791,"context_line":"class NexentaException(ManilaException):"},{"line_number":792,"context_line":"    message \u003d _(\"Exception due to Nexenta failure.\""},{"line_number":793,"context_line":"                \"%(reason)s\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_5d569b5c","line":793,"range":{"start_line":793,"start_character":16,"end_line":793,"end_character":29},"updated":"2016-07-31 01:52:56.000000000","message":"why the line break?","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e043be7275b4c347c699079629260c9c19ccb967","unresolved":false,"context_lines":[{"line_number":790,"context_line":""},{"line_number":791,"context_line":"class NexentaException(ManilaException):"},{"line_number":792,"context_line":"    message \u003d _(\"Exception due to Nexenta failure.\""},{"line_number":793,"context_line":"                \"%(reason)s\")"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_83f51bee","line":793,"range":{"start_line":793,"start_character":16,"end_line":793,"end_character":29},"in_reply_to":"bacf61ea_5d569b5c","updated":"2016-08-02 14:12:41.000000000","message":"fixed","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"}],"manila/opts.py":[{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"19923f53567a65d5fe23f7272bdfb36e7ceabc98","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    manila.share.drivers.netapp.options.netapp_provisioning_opts,"},{"line_number":138,"context_line":"    manila.share.drivers.netapp.options.netapp_replication_opts,"},{"line_number":139,"context_line":"    manila.share.drivers.nexenta.options.nexenta_connection_opts,"},{"line_number":140,"context_line":"    manila.share.drivers.nexenta.options.nexenta_nfs_opts,"},{"line_number":141,"context_line":"    manila.share.drivers.nexenta.options.nexenta_dataset_opts,"},{"line_number":142,"context_line":"    manila.share.drivers.quobyte.quobyte.quobyte_manila_share_opts,"},{"line_number":143,"context_line":"    manila.share.drivers.service_instance.common_opts,"},{"line_number":144,"context_line":"    manila.share.drivers.service_instance.no_share_servers_handling_mode_opts,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_f6e98de7","line":141,"range":{"start_line":140,"start_character":4,"end_line":141,"end_character":61},"updated":"2016-05-20 07:06:11.000000000","message":"Exchange these two lines to keep the list alphabetically sorted.","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    manila.share.drivers.netapp.options.netapp_provisioning_opts,"},{"line_number":138,"context_line":"    manila.share.drivers.netapp.options.netapp_replication_opts,"},{"line_number":139,"context_line":"    manila.share.drivers.nexenta.options.nexenta_connection_opts,"},{"line_number":140,"context_line":"    manila.share.drivers.nexenta.options.nexenta_nfs_opts,"},{"line_number":141,"context_line":"    manila.share.drivers.nexenta.options.nexenta_dataset_opts,"},{"line_number":142,"context_line":"    manila.share.drivers.quobyte.quobyte.quobyte_manila_share_opts,"},{"line_number":143,"context_line":"    manila.share.drivers.service_instance.common_opts,"},{"line_number":144,"context_line":"    manila.share.drivers.service_instance.no_share_servers_handling_mode_opts,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_d4c185e5","line":141,"range":{"start_line":140,"start_character":4,"end_line":141,"end_character":61},"in_reply_to":"bab6814e_f6e98de7","updated":"2016-05-23 14:35:29.000000000","message":"Done","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"628b9c55b258048913e7dac05bd1e982fc45f663","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    manila.share.drivers.netapp.options.netapp_basicauth_opts,"},{"line_number":136,"context_line":"    manila.share.drivers.netapp.options.netapp_provisioning_opts,"},{"line_number":137,"context_line":"    manila.share.drivers.netapp.options.netapp_replication_opts,"},{"line_number":138,"context_line":"    manila.share.drivers.nexenta.options.nexenta_connection_opts,"},{"line_number":139,"context_line":"    manila.share.drivers.nexenta.options.nexenta_dataset_opts,"},{"line_number":140,"context_line":"    manila.share.drivers.nexenta.options.nexenta_nfs_opts,"},{"line_number":141,"context_line":"    manila.share.drivers.quobyte.quobyte.quobyte_manila_share_opts,"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_20408406","line":138,"range":{"start_line":138,"start_character":4,"end_line":138,"end_character":40},"updated":"2016-05-23 16:37:42.000000000","message":"Module \"manila.share.drivers.nexenta.options\" is not imported. Generation of config sample will fail.","commit_id":"ab2180bbc5b04aeba555c5bfd1e35755171dc98d"}],"manila/share/drivers/nexenta/jsonrpc.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"import requests"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from manila.exception import NexentaException"},{"line_number":30,"context_line":"from manila.utils import retry"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_e1df4838","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":45},"updated":"2016-04-23 03:14:33.000000000","message":"In https://github.com/openstack/manila/blob/master/manila/exception.py, There is no NexentaException. and can not find in this patch.\nPlease add it.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        data \u003d jsonutils.dumps({"},{"line_number":77,"context_line":"            \u0027object\u0027: self.obj,"},{"line_number":78,"context_line":"            \u0027method\u0027: self.method,"},{"line_number":79,"context_line":"            \u0027params\u0027: args"},{"line_number":80,"context_line":"        })"},{"line_number":81,"context_line":"        auth \u003d (\u0027%s:%s\u0027 % (self.user, self.password)).encode(\u0027base64\u0027)[:-1]"},{"line_number":82,"context_line":"        headers \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_c15deced","line":79,"range":{"start_line":79,"start_character":22,"end_line":79,"end_character":26},"updated":"2016-04-23 03:14:33.000000000","message":"Add \u0027,\u0027 in the end.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        auth \u003d (\u0027%s:%s\u0027 % (self.user, self.password)).encode(\u0027base64\u0027)[:-1]"},{"line_number":82,"context_line":"        headers \u003d {"},{"line_number":83,"context_line":"            \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":84,"context_line":"            \u0027Authorization\u0027: \u0027Basic %s\u0027 % auth"},{"line_number":85,"context_line":"        }"},{"line_number":86,"context_line":"        LOG.debug(\u0027Sending JSON data: %s\u0027, data)"},{"line_number":87,"context_line":"        r \u003d session.post(self.url, data\u003ddata, headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_216dc099","line":84,"range":{"start_line":84,"start_character":42,"end_line":84,"end_character":46},"updated":"2016-04-23 03:14:33.000000000","message":"same above","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            LOG.debug(\u0027Response returned 403, logging in\u0027)"},{"line_number":90,"context_line":"            headers \u003d {"},{"line_number":91,"context_line":"                \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":92,"context_line":"                \u0027Authorization\u0027: \u0027Basic %s\u0027 % auth"},{"line_number":93,"context_line":"            }"},{"line_number":94,"context_line":"            r \u003d session.post(self.url, data\u003ddata, headers\u003dheaders)"},{"line_number":95,"context_line":"        response \u003d r.json()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_816c949d","line":92,"range":{"start_line":92,"start_character":46,"end_line":92,"end_character":50},"updated":"2016-04-23 03:14:33.000000000","message":"same above","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"d09359dc75518c89cbabc016b29d8eaae4abf893","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from manila.utils import retry"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":"socket.setdefaulttimeout(100)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NexentaJSONProxy(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_339e0208","line":32,"range":{"start_line":32,"start_character":25,"end_line":32,"end_character":28},"updated":"2016-05-13 13:58:34.000000000","message":"Does you need to config this number?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from manila.utils import retry"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":"socket.setdefaulttimeout(100)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NexentaJSONProxy(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_4408232e","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":29},"updated":"2016-05-12 14:00:07.000000000","message":"maybe you may want to make it configurable?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from manila.utils import retry"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":"socket.setdefaulttimeout(100)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class NexentaJSONProxy(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_0b4095a4","line":32,"range":{"start_line":32,"start_character":25,"end_line":32,"end_character":28},"in_reply_to":"dab17558_339e0208","updated":"2016-05-19 16:38:29.000000000","message":"not sure about this one actually","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def __repr__(self):"},{"line_number":70,"context_line":"        return \u0027NMS proxy: %s\u0027 % self.url"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @retry(retry_exc_tuple, retries\u003d6)"},{"line_number":73,"context_line":"    def __call__(self, *args):"},{"line_number":74,"context_line":"        data \u003d jsonutils.dumps({"},{"line_number":75,"context_line":"            \u0027object\u0027: self.obj,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_df4b3e5e","line":72,"range":{"start_line":72,"start_character":27,"end_line":72,"end_character":38},"updated":"2016-05-12 14:00:07.000000000","message":"Same here, configurable retries?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0f6cf62860125c16d508bb2f341720f896ea3ec4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def __repr__(self):"},{"line_number":70,"context_line":"        return \u0027NMS proxy: %s\u0027 % self.url"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @retry(retry_exc_tuple, retries\u003d6)"},{"line_number":73,"context_line":"    def __call__(self, *args):"},{"line_number":74,"context_line":"        data \u003d jsonutils.dumps({"},{"line_number":75,"context_line":"            \u0027object\u0027: self.obj,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_20afe47d","line":72,"range":{"start_line":72,"start_character":27,"end_line":72,"end_character":38},"in_reply_to":"dab17558_8a3cfb2f","updated":"2016-05-23 16:38:00.000000000","message":"Example: https://github.com/openstack/manila/blob/39cb200c/manila/share/drivers/windows/winrm_helper.py#L93","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def __repr__(self):"},{"line_number":70,"context_line":"        return \u0027NMS proxy: %s\u0027 % self.url"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @retry(retry_exc_tuple, retries\u003d6)"},{"line_number":73,"context_line":"    def __call__(self, *args):"},{"line_number":74,"context_line":"        data \u003d jsonutils.dumps({"},{"line_number":75,"context_line":"            \u0027object\u0027: self.obj,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_8a3cfb2f","line":72,"range":{"start_line":72,"start_character":27,"end_line":72,"end_character":38},"in_reply_to":"dab17558_df4b3e5e","updated":"2016-05-19 16:38:29.000000000","message":"probably missing something simple, but how do I use config opts here?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            \u0027method\u0027: self.method,"},{"line_number":77,"context_line":"            \u0027params\u0027: args,"},{"line_number":78,"context_line":"        })"},{"line_number":79,"context_line":"        auth \u003d (\u0027%s:%s\u0027 % (self.user, self.password)).encode(\u0027base64\u0027)[:-1]"},{"line_number":80,"context_line":"        headers \u003d {"},{"line_number":81,"context_line":"            \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":82,"context_line":"            \u0027Authorization\u0027: \u0027Basic %s\u0027 % auth,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_e42f97a5","line":79,"range":{"start_line":79,"start_character":8,"end_line":79,"end_character":75},"updated":"2016-05-12 14:00:07.000000000","message":"This does not work for py3, see results here: http://logs.openstack.org/86/309286/6/check/gate-manila-python34-db/5a003a1/testr_results.html.gz","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            \u0027method\u0027: self.method,"},{"line_number":77,"context_line":"            \u0027params\u0027: args,"},{"line_number":78,"context_line":"        })"},{"line_number":79,"context_line":"        auth \u003d (\u0027%s:%s\u0027 % (self.user, self.password)).encode(\u0027base64\u0027)[:-1]"},{"line_number":80,"context_line":"        headers \u003d {"},{"line_number":81,"context_line":"            \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":82,"context_line":"            \u0027Authorization\u0027: \u0027Basic %s\u0027 % auth,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_d4c8c557","line":79,"range":{"start_line":79,"start_character":8,"end_line":79,"end_character":75},"in_reply_to":"dab17558_e42f97a5","updated":"2016-05-19 16:38:29.000000000","message":"fixed","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"d09359dc75518c89cbabc016b29d8eaae4abf893","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        LOG.debug(\u0027Got response: %s\u0027, response)"},{"line_number":88,"context_line":"        if response.get(\u0027error\u0027) is not None:"},{"line_number":89,"context_line":"            message \u003d response[\u0027error\u0027].get(\u0027message\u0027, \u0027\u0027)"},{"line_number":90,"context_line":"            raise NexentaException(message)"},{"line_number":91,"context_line":"        return response.get(\u0027result\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_d3f1766c","line":90,"range":{"start_line":90,"start_character":35,"end_line":90,"end_character":42},"updated":"2016-05-13 13:58:34.000000000","message":"NexentaException(response\u003dmessage)","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        LOG.debug(\u0027Got response: %s\u0027, response)"},{"line_number":88,"context_line":"        if response.get(\u0027error\u0027) is not None:"},{"line_number":89,"context_line":"            message \u003d response[\u0027error\u0027].get(\u0027message\u0027, \u0027\u0027)"},{"line_number":90,"context_line":"            raise NexentaException(message)"},{"line_number":91,"context_line":"        return response.get(\u0027result\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_6b15e199","line":90,"range":{"start_line":90,"start_character":35,"end_line":90,"end_character":42},"in_reply_to":"dab17558_d3f1766c","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"628b9c55b258048913e7dac05bd1e982fc45f663","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from manila.utils import retry"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":"socket.setdefaulttimeout(100)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class NexentaJSONProxy(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_60fbac79","line":33,"range":{"start_line":33,"start_character":0,"end_line":33,"end_character":29},"updated":"2016-05-23 16:37:42.000000000","message":"Here, you set value for shared module. So, you can affect other functionality doing so.","commit_id":"ab2180bbc5b04aeba555c5bfd1e35755171dc98d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        LOG.debug(\u0027Got response: %s\u0027, response)"},{"line_number":88,"context_line":"        if response.get(\u0027error\u0027) is not None:"},{"line_number":89,"context_line":"            message \u003d response[\u0027error\u0027].get(\u0027message\u0027, \u0027\u0027)"},{"line_number":90,"context_line":"            raise NexentaException(response\u003dmessage)"},{"line_number":91,"context_line":"        return response.get(\u0027result\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_6e0738ca","line":90,"updated":"2016-07-13 05:39:20.000000000","message":"reason\u003dmessage","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ea21ce6199521ccea6c849bd29bf435a73b6bdf8","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        r \u003d requests.post(self.url, data\u003ddata, headers\u003dheaders)"},{"line_number":86,"context_line":"        response \u003d r.json()"},{"line_number":87,"context_line":"        LOG.debug(\u0027Got response: %s\u0027, response)"},{"line_number":88,"context_line":"        if response.get(\u0027error\u0027) is not None:"},{"line_number":89,"context_line":"            message \u003d response[\u0027error\u0027].get(\u0027message\u0027, \u0027\u0027)"},{"line_number":90,"context_line":"            raise NexentaException(reason\u003dmessage)"},{"line_number":91,"context_line":"        return response.get(\u0027result\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_5d285be2","line":90,"range":{"start_line":88,"start_character":0,"end_line":90,"end_character":50},"updated":"2016-07-31 01:48:43.000000000","message":"not covered by unit test..","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e043be7275b4c347c699079629260c9c19ccb967","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        r \u003d requests.post(self.url, data\u003ddata, headers\u003dheaders)"},{"line_number":86,"context_line":"        response \u003d r.json()"},{"line_number":87,"context_line":"        LOG.debug(\u0027Got response: %s\u0027, response)"},{"line_number":88,"context_line":"        if response.get(\u0027error\u0027) is not None:"},{"line_number":89,"context_line":"            message \u003d response[\u0027error\u0027].get(\u0027message\u0027, \u0027\u0027)"},{"line_number":90,"context_line":"            raise NexentaException(reason\u003dmessage)"},{"line_number":91,"context_line":"        return response.get(\u0027result\u0027)"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_c2b38a4b","line":90,"range":{"start_line":88,"start_character":0,"end_line":90,"end_character":50},"in_reply_to":"bacf61ea_5d285be2","updated":"2016-08-02 14:12:41.000000000","message":"Done","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"}],"manila/share/drivers/nexenta/nexenta_helper.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations\r"},{"line_number":14,"context_line":"#    under the License.\r"},{"line_number":15,"context_line":"\r"},{"line_number":16,"context_line":"from manila import exception\r"},{"line_number":17,"context_line":"from manila.i18n import _, _LI\r"},{"line_number":18,"context_line":"from manila.share.drivers.nexenta import jsonrpc\r"},{"line_number":19,"context_line":"from oslo_log import log\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"import utils\r"},{"line_number":22,"context_line":"\r"},{"line_number":23,"context_line":"LOG \u003d log.getLogger(__name__)\r"},{"line_number":24,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_2177803c","line":21,"range":{"start_line":16,"start_character":0,"end_line":21,"end_character":12},"updated":"2016-04-23 03:14:33.000000000","message":"from oslo_log import log\n\nfrom manila.i18n import _\nfrom manila.i18n import _LI\nfrom manila.share.drivers.nexenta import jsonrpc\nimport utils","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            self.configuration.nexenta_mount_point_base)\r"},{"line_number":38,"context_line":"        self.dataset_compression \u003d (\r"},{"line_number":39,"context_line":"            self.configuration.nexenta_dataset_compression)\r"},{"line_number":40,"context_line":"        self.dataset_deduplication \u003d self.configuration.nexenta_dataset_dedup\r"},{"line_number":41,"context_line":"        self.nms \u003d None\r"},{"line_number":42,"context_line":"        self.nms_protocol \u003d self.configuration.nexenta_rest_protocol\r"},{"line_number":43,"context_line":"        self.nms_host \u003d self.configuration.nexenta_host\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_c18e8c26","line":40,"range":{"start_line":40,"start_character":72,"end_line":40,"end_character":77},"updated":"2016-04-23 03:14:33.000000000","message":"s/dedup/dedupe\nPlease see: https://github.com/openstack/manila/blob/master/doc/source/devref/capabilities_and_extra_specs.rst","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.nms_password \u003d self.configuration.nexenta_password\r"},{"line_number":49,"context_line":"        self.storage_protocol \u003d \u0027NFS\u0027\r"},{"line_number":50,"context_line":"\r"},{"line_number":51,"context_line":"    def _check_service(self):\r"},{"line_number":52,"context_line":"        LOG.debug(\u0027Check service is not implemented\u0027)\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"    @property\r"},{"line_number":55,"context_line":"    def backend_name(self):\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_1e7111a9","line":52,"range":{"start_line":51,"start_character":4,"end_line":52,"end_character":53},"updated":"2016-04-22 15:52:10.000000000","message":"What is this for?","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def backend_name(self):\r"},{"line_number":56,"context_line":"        backend_name \u003d None\r"},{"line_number":57,"context_line":"        if self.configuration:\r"},{"line_number":58,"context_line":"            backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)\r"},{"line_number":59,"context_line":"        if not backend_name:\r"},{"line_number":60,"context_line":"            backend_name \u003d self.__class__.__name__\r"},{"line_number":61,"context_line":"        return backend_name\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_5e0ee932","line":58,"range":{"start_line":58,"start_character":56,"end_line":58,"end_character":75},"updated":"2016-04-22 15:52:10.000000000","message":"share_backend_name","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        if self.configuration:\r"},{"line_number":58,"context_line":"            backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)\r"},{"line_number":59,"context_line":"        if not backend_name:\r"},{"line_number":60,"context_line":"            backend_name \u003d self.__class__.__name__\r"},{"line_number":61,"context_line":"        return backend_name\r"},{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"    def do_setup(self):\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_fefed503","line":60,"range":{"start_line":60,"start_character":27,"end_line":60,"end_character":50},"updated":"2016-04-22 15:52:10.000000000","message":"RestHelper?","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            backend_name \u003d self.configuration.safe_get(\u0027volume_backend_name\u0027)\r"},{"line_number":59,"context_line":"        if not backend_name:\r"},{"line_number":60,"context_line":"            backend_name \u003d self.__class__.__name__\r"},{"line_number":61,"context_line":"        return backend_name\r"},{"line_number":62,"context_line":"\r"},{"line_number":63,"context_line":"    def do_setup(self):\r"},{"line_number":64,"context_line":"        if self.nms_protocol \u003d\u003d \u0027auto\u0027:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_7e25a5c0","line":61,"range":{"start_line":61,"start_character":0,"end_line":61,"end_character":8},"updated":"2016-04-22 15:52:10.000000000","message":"Where is this method used?","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":72,"context_line":"\r"},{"line_number":73,"context_line":"    def check_for_setup_error(self):\r"},{"line_number":74,"context_line":"        if not self.nms.volume.object_exists(self.volume):\r"},{"line_number":75,"context_line":"            raise LookupError(_(\"Volume %s does not exist in Nexenta\"\r"},{"line_number":76,"context_line":"                                \"Stor appliance\"), self.volume)\r"},{"line_number":77,"context_line":"        folder \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":78,"context_line":"        create_folder_props \u003d {\u0027recordsize\u0027: \u00274K\u0027,\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_be345dde","line":75,"range":{"start_line":75,"start_character":68,"end_line":75,"end_character":69},"updated":"2016-04-22 15:52:10.000000000","message":"Missing space","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                               \u0027quota\u0027: quota,\r"},{"line_number":98,"context_line":"                               \u0027reservation\u0027: quota,\r"},{"line_number":99,"context_line":"                               \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":100,"context_line":"                               \u0027sharesmb\u0027: self.configuration.nexenta_smb,\r"},{"line_number":101,"context_line":"                               \u0027sharenfs\u0027: self.configuration.nexenta_nfs,\r"},{"line_number":102,"context_line":"                               }\r"},{"line_number":103,"context_line":"\r"},{"line_number":104,"context_line":"        parent_path \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_ded2f95a","line":101,"range":{"start_line":100,"start_character":31,"end_line":101,"end_character":74},"updated":"2016-04-22 15:52:10.000000000","message":"These values could also be read in your setup method... also, would sharesmb make sense? You\u0027re currently supporting NFS only..","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            \u0027recursive\u0027: \u0027true\u0027,\r"},{"line_number":118,"context_line":"            \u0027anonymous_rw\u0027: \u0027true\u0027,\r"},{"line_number":119,"context_line":"        }\r"},{"line_number":120,"context_line":"        LOG.debug(\u0027Sharing folder on Nexenta Store\u0027)\r"},{"line_number":121,"context_line":"        self.nms.netstorsvc.share_folder(\u0027svc:/network/nfs/server:default\u0027,\r"},{"line_number":122,"context_line":"                                         path, share_opts)\r"},{"line_number":123,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_1e5bd1f7","line":120,"range":{"start_line":120,"start_character":45,"end_line":120,"end_character":50},"updated":"2016-04-22 15:52:10.000000000","message":"Logging the path could be helpful..","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                        % protocol))\r"},{"line_number":138,"context_line":"        return location\r"},{"line_number":139,"context_line":"\r"},{"line_number":140,"context_line":"    def _delete_share(self, share_name, share_proto):\r"},{"line_number":141,"context_line":"        \"\"\"Delete share.\"\"\"\r"},{"line_number":142,"context_line":"        folder \u003d self._get_share_path(share_name)\r"},{"line_number":143,"context_line":"        # Destroy a child object.\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_61f7b859","line":140,"range":{"start_line":140,"start_character":40,"end_line":140,"end_character":51},"updated":"2016-04-23 03:14:33.000000000","message":"This parameter not be used. Does you need to check share_proto.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    def _allow_access(self, share_name, access, share_proto):\r"},{"line_number":199,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"},{"line_number":200,"context_line":"        access_to \u003d access[\u0027access_to\u0027].strip()\r"},{"line_number":201,"context_line":"        access_type \u003d access[\u0027access_type\u0027].strip()\r"},{"line_number":202,"context_line":"\r"},{"line_number":203,"context_line":"        if access_type \u003d\u003d \u0027ip\u0027:\r"},{"line_number":204,"context_line":"            opts \u003d self.nms.netstorsvc.get_shareopts(\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_21ab0020","line":201,"range":{"start_line":201,"start_character":43,"end_line":201,"end_character":51},"updated":"2016-04-23 03:14:33.000000000","message":"This is redundant, Because framework has been checked for you.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        access_to \u003d access[\u0027access_to\u0027].strip()\r"},{"line_number":201,"context_line":"        access_type \u003d access[\u0027access_type\u0027].strip()\r"},{"line_number":202,"context_line":"\r"},{"line_number":203,"context_line":"        if access_type \u003d\u003d \u0027ip\u0027:\r"},{"line_number":204,"context_line":"            opts \u003d self.nms.netstorsvc.get_shareopts(\r"},{"line_number":205,"context_line":"                \u0027svc:/network/nfs/server:default\u0027,\r"},{"line_number":206,"context_line":"                self._get_share_path(share_name))\r"},{"line_number":207,"context_line":"            rw_list \u003d opts[\u0027read_write\u0027]\r"},{"line_number":208,"context_line":"            if rw_list and rw_list !\u003d \u0027*\u0027:\r"},{"line_number":209,"context_line":"                rw_list +\u003d \u0027%s:\u0027 % access_to\r"},{"line_number":210,"context_line":"            else:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_01124462","line":207,"range":{"start_line":203,"start_character":8,"end_line":207,"end_character":40},"updated":"2016-04-23 03:14:33.000000000","message":"You need to distinguish \"access_level\"  between RW and RO.\naccess_level \u003d access[\u0027access_level\u0027]","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                self._get_share_path(share_name), share_opts)\r"},{"line_number":224,"context_line":"        else:\r"},{"line_number":225,"context_line":"            raise exception.NexentaException(\r"},{"line_number":226,"context_line":"                \u0027Unsupported access type: %s\u0027 % access_type)\r"},{"line_number":227,"context_line":"        return result\r"},{"line_number":228,"context_line":"\r"},{"line_number":229,"context_line":"    def _deny_access(self, share_name, access, share_proto):\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_617cd8b5","line":226,"range":{"start_line":226,"start_character":16,"end_line":226,"end_character":19},"updated":"2016-04-23 03:14:33.000000000","message":"Better to add \"Only ip access type allowed.\"","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        :param nfs_share: example 172.18.194.100:/var/nfs\r"},{"line_number":267,"context_line":"        \"\"\"\r"},{"line_number":268,"context_line":"        folder_props \u003d self.nms.folder.get_child_props(\r"},{"line_number":269,"context_line":"            \u0027%s/%s\u0027 % (self.volume, self.share), \u0027used|available\u0027)\r"},{"line_number":270,"context_line":"        free \u003d utils.str2gib_size(folder_props[\u0027available\u0027])\r"},{"line_number":271,"context_line":"        allocated \u003d utils.str2gib_size(folder_props[\u0027used\u0027])\r"},{"line_number":272,"context_line":"        return free + allocated, free, allocated\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_9e724110","line":269,"range":{"start_line":269,"start_character":15,"end_line":269,"end_character":16},"updated":"2016-04-22 15:52:10.000000000","message":"\"|\" ?","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        allocated \u003d utils.str2gib_size(folder_props[\u0027used\u0027])\r"},{"line_number":272,"context_line":"        return free + allocated, free, allocated\r"},{"line_number":273,"context_line":"\r"},{"line_number":274,"context_line":"    def _update_volume_stats(self):\r"},{"line_number":275,"context_line":"        total, free, allocated \u003d self._get_capacity_info(self.share)\r"},{"line_number":276,"context_line":"        return dict(\r"},{"line_number":277,"context_line":"            vendor_name\u003d\u0027Nexenta\u0027,\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_9e4401b8","line":274,"range":{"start_line":274,"start_character":8,"end_line":274,"end_character":28},"updated":"2016-04-22 15:52:10.000000000","message":"volume\u003d\u003dpool?","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0838dd5dc90049c5657116625c39e5d72496f555","unresolved":false,"context_lines":[{"line_number":273,"context_line":"\r"},{"line_number":274,"context_line":"    def _update_volume_stats(self):\r"},{"line_number":275,"context_line":"        total, free, allocated \u003d self._get_capacity_info(self.share)\r"},{"line_number":276,"context_line":"        return dict(\r"},{"line_number":277,"context_line":"            vendor_name\u003d\u0027Nexenta\u0027,\r"},{"line_number":278,"context_line":"            storage_protocol\u003dself.storage_protocol,\r"},{"line_number":279,"context_line":"            total_capacity_gb\u003dtotal,\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_7c559bc4","line":276,"range":{"start_line":276,"start_character":8,"end_line":276,"end_character":20},"updated":"2016-04-23 03:18:03.000000000","message":"In code line 38~40, you have self.dataset_compression and dedupe capabilities. Why not update it in this? You could see compression and dedupe capabilities in this link:\n\nhttps://github.com/openstack/manila/blob/master/doc/source/devref/capabilities_and_extra_specs.rst","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            free_capacity_gb\u003dfree,\r"},{"line_number":281,"context_line":"            reserved_percentage\u003dself.configuration.reserved_share_percentage,\r"},{"line_number":282,"context_line":"            nfs_mount_point_base\u003dself.nfs_mount_point_base,\r"},{"line_number":283,"context_line":"            thin_provisioning\u003dself.configuration.nexenta_thin_provisioning\r"},{"line_number":284,"context_line":"        )\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_9c019707","line":283,"range":{"start_line":283,"start_character":12,"end_line":283,"end_character":74},"updated":"2016-04-23 03:14:33.000000000","message":"If the thin_provisioning is true, it need to add: max_over_subscription_ratio\u003d(\n                        self.configuration.safe_get(\n                            \u0027max_over_subscription_ratio\u0027)),","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\"Create file system.\"\"\"\r"},{"line_number":91,"context_line":"        if self.configuration.nexenta_thin_provisioning:\r"},{"line_number":92,"context_line":"            quota \u003d \u0027none\u0027\r"},{"line_number":93,"context_line":"        else:\r"},{"line_number":94,"context_line":"            quota \u003d \u0027%sG\u0027 % share[\u0027size\u0027]\r"},{"line_number":95,"context_line":"        create_folder_props \u003d {\u0027recordsize\u0027: \u00274K\u0027,\r"},{"line_number":96,"context_line":"                               \u0027quota\u0027: quota,\r"},{"line_number":97,"context_line":"                               \u0027reservation\u0027: quota,\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_37b49c80","line":94,"range":{"start_line":93,"start_character":8,"end_line":94,"end_character":41},"updated":"2016-05-10 16:16:11.000000000","message":"I am assuming this is for thick, so, can\u0027t you set a quota limit for when nexenta has thin_provisioning set? in that case, would an user be able to store more data than the share size specified when creating the share?","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"4489c0ef8c1ab92d8543969a8a8a867b6e63a6e7","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\"Create file system.\"\"\"\r"},{"line_number":91,"context_line":"        if self.configuration.nexenta_thin_provisioning:\r"},{"line_number":92,"context_line":"            quota \u003d \u0027none\u0027\r"},{"line_number":93,"context_line":"        else:\r"},{"line_number":94,"context_line":"            quota \u003d \u0027%sG\u0027 % share[\u0027size\u0027]\r"},{"line_number":95,"context_line":"        create_folder_props \u003d {\u0027recordsize\u0027: \u00274K\u0027,\r"},{"line_number":96,"context_line":"                               \u0027quota\u0027: quota,\r"},{"line_number":97,"context_line":"                               \u0027reservation\u0027: quota,\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_183a2d99","line":94,"range":{"start_line":93,"start_character":8,"end_line":94,"end_character":41},"in_reply_to":"dab17558_37b49c80","updated":"2016-05-11 15:41:23.000000000","message":"Good point, fixed.","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        try:\r"},{"line_number":167,"context_line":"            self.nms.snapshot.destroy(\u0027%s@%s\u0027 % (\r"},{"line_number":168,"context_line":"                self._get_share_path(share_name), snapshot_name), \u0027\u0027)\r"},{"line_number":169,"context_line":"        except exception.NexentaException as exc:\r"},{"line_number":170,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:\r"},{"line_number":171,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s does not \u0027\r"},{"line_number":172,"context_line":"                             \u0027exist, it was already deleted.\u0027),\r"},{"line_number":173,"context_line":"                         {\r"},{"line_number":174,"context_line":"                             \u0027folder\u0027: share_name,\r"},{"line_number":175,"context_line":"                             \u0027snapshot\u0027: snapshot_name,\r"},{"line_number":176,"context_line":"                })\r"},{"line_number":177,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:\r"},{"line_number":178,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s has dependent \u0027\r"},{"line_number":179,"context_line":"                             \u0027clones, it will be deleted later.\u0027),\r"},{"line_number":180,"context_line":"                         {\r"},{"line_number":181,"context_line":"                             \u0027folder\u0027: share_name,\r"},{"line_number":182,"context_line":"                             \u0027snapshot\u0027: snapshot_name,\r"},{"line_number":183,"context_line":"                })\r"},{"line_number":184,"context_line":"\r"},{"line_number":185,"context_line":"    def _create_share_from_snapshot(self, share, snapshot):\r"},{"line_number":186,"context_line":"        snapshot_name \u003d \u0027%s/%s/%s@%s\u0027 % (\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_f227c2b3","line":183,"range":{"start_line":169,"start_character":8,"end_line":183,"end_character":18},"updated":"2016-05-10 16:16:11.000000000","message":"you are swallowing the exception in a possible \"else\"... is this intended?","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"4489c0ef8c1ab92d8543969a8a8a867b6e63a6e7","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        try:\r"},{"line_number":167,"context_line":"            self.nms.snapshot.destroy(\u0027%s@%s\u0027 % (\r"},{"line_number":168,"context_line":"                self._get_share_path(share_name), snapshot_name), \u0027\u0027)\r"},{"line_number":169,"context_line":"        except exception.NexentaException as exc:\r"},{"line_number":170,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:\r"},{"line_number":171,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s does not \u0027\r"},{"line_number":172,"context_line":"                             \u0027exist, it was already deleted.\u0027),\r"},{"line_number":173,"context_line":"                         {\r"},{"line_number":174,"context_line":"                             \u0027folder\u0027: share_name,\r"},{"line_number":175,"context_line":"                             \u0027snapshot\u0027: snapshot_name,\r"},{"line_number":176,"context_line":"                })\r"},{"line_number":177,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:\r"},{"line_number":178,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s has dependent \u0027\r"},{"line_number":179,"context_line":"                             \u0027clones, it will be deleted later.\u0027),\r"},{"line_number":180,"context_line":"                         {\r"},{"line_number":181,"context_line":"                             \u0027folder\u0027: share_name,\r"},{"line_number":182,"context_line":"                             \u0027snapshot\u0027: snapshot_name,\r"},{"line_number":183,"context_line":"                })\r"},{"line_number":184,"context_line":"\r"},{"line_number":185,"context_line":"    def _create_share_from_snapshot(self, share, snapshot):\r"},{"line_number":186,"context_line":"        snapshot_name \u003d \u0027%s/%s/%s@%s\u0027 % (\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_f5301458","line":183,"range":{"start_line":169,"start_character":8,"end_line":183,"end_character":18},"in_reply_to":"dab17558_f227c2b3","updated":"2016-05-11 15:41:23.000000000","message":"Agree","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            result \u003d self.nms.netstorsvc.share_folder(\r"},{"line_number":219,"context_line":"                \u0027svc:/network/nfs/server:default\u0027,\r"},{"line_number":220,"context_line":"                self._get_share_path(share_name), share_opts)\r"},{"line_number":221,"context_line":"            return result\r"},{"line_number":222,"context_line":"        raise exception.InvalidInput(\r"},{"line_number":223,"context_line":"            \u0027Unsupported access type: %s\u0027 % access_type)\r"},{"line_number":224,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_928bd667","line":221,"range":{"start_line":221,"start_character":12,"end_line":221,"end_character":25},"updated":"2016-05-10 16:16:11.000000000","message":"you are not using this return value in nexenta_nas allow_access method.","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                    \u0027svc:/network/nfs/server:default\u0027,\r"},{"line_number":249,"context_line":"                    self._get_share_path(share_name),\r"},{"line_number":250,"context_line":"                    share_opts)\r"},{"line_number":251,"context_line":"                return result\r"},{"line_number":252,"context_line":"            return\r"},{"line_number":253,"context_line":"        raise exception.InvalidInput(\u0027Only IP-based access is allowed\u0027)\r"},{"line_number":254,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_12f6c6f8","line":251,"range":{"start_line":251,"start_character":23,"end_line":251,"end_character":29},"updated":"2016-05-10 16:16:11.000000000","message":"same as above","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"34c4ec3cd097d29c5f597fecdb0e5b9a61728c06","unresolved":false,"context_lines":[{"line_number":78,"context_line":"\r"},{"line_number":79,"context_line":"    def _create_filesystem(self, share):\r"},{"line_number":80,"context_line":"        \"\"\"Create file system.\"\"\"\r"},{"line_number":81,"context_line":"        if self.configuration.nexenta_thin_provisioning:\r"},{"line_number":82,"context_line":"            create_folder_props \u003d {\u0027recordsize\u0027: \u00274K\u0027,\r"},{"line_number":83,"context_line":"                                   \u0027quota\u0027: \u0027%sG\u0027 % share[\u0027size\u0027],\r"},{"line_number":84,"context_line":"                                   \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":85,"context_line":"                                   \u0027sharenfs\u0027: self.nfs,\r"},{"line_number":86,"context_line":"                                   }\r"},{"line_number":87,"context_line":"        else:\r"},{"line_number":88,"context_line":"            create_folder_props \u003d {\u0027recordsize\u0027: \u00274K\u0027,\r"},{"line_number":89,"context_line":"                                   \u0027quota\u0027: \u0027%sG\u0027 % share[\u0027size\u0027],\r"},{"line_number":90,"context_line":"                                   \u0027reservation\u0027: \u0027%sG\u0027 % share[\u0027size\u0027],\r"},{"line_number":91,"context_line":"                                   \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":92,"context_line":"                                   \u0027sharenfs\u0027: self.nfs,\r"},{"line_number":93,"context_line":"                                   }\r"},{"line_number":94,"context_line":"\r"},{"line_number":95,"context_line":"        parent_path \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":96,"context_line":"        self.nms.folder.create_with_props(\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_fe363101","line":93,"range":{"start_line":81,"start_character":8,"end_line":93,"end_character":36},"updated":"2016-05-11 16:26:17.000000000","message":"you could declare the common ones before the if/else, and then update the dictionary with the reservation field using a single condition (no if else necessary anymore)","commit_id":"14631960d5ee3f089e615f60e2831f128856aca6"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"    def check_for_setup_error(self):\r"},{"line_number":58,"context_line":"        if not self.nms.volume.object_exists(self.volume):\r"},{"line_number":59,"context_line":"            raise LookupError(_(\"Volume %s does not exist in Nexenta\"\r"},{"line_number":60,"context_line":"                                \"Stor appliance\"), self.volume)\r"},{"line_number":61,"context_line":"        folder \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":62,"context_line":"        create_folder_props \u003d {\u0027recordsize\u0027: \u00274K\u0027,\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_9fc37638","line":59,"range":{"start_line":59,"start_character":18,"end_line":59,"end_character":29},"updated":"2016-05-12 14:00:07.000000000","message":"Where this exception comes from?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"2ebac1ca258db15da3be85b4db438a4ff002834a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"    def check_for_setup_error(self):\r"},{"line_number":58,"context_line":"        if not self.nms.volume.object_exists(self.volume):\r"},{"line_number":59,"context_line":"            raise LookupError(_(\"Volume %s does not exist in Nexenta\"\r"},{"line_number":60,"context_line":"                                \"Stor appliance\"), self.volume)\r"},{"line_number":61,"context_line":"        folder \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":62,"context_line":"        create_folder_props \u003d {\u0027recordsize\u0027: \u00274K\u0027,\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_fe927a4a","line":59,"range":{"start_line":59,"start_character":18,"end_line":59,"end_character":29},"in_reply_to":"dab17558_9fc37638","updated":"2016-05-13 18:46:22.000000000","message":"probably NexentaException would make more sense here","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            raise LookupError(_(\"Volume %s does not exist in Nexenta\"\r"},{"line_number":60,"context_line":"                                \"Stor appliance\"), self.volume)\r"},{"line_number":61,"context_line":"        folder \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":62,"context_line":"        create_folder_props \u003d {\u0027recordsize\u0027: \u00274K\u0027,\r"},{"line_number":63,"context_line":"                               \u0027quota\u0027: \u0027none\u0027,\r"},{"line_number":64,"context_line":"                               \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":65,"context_line":"                               \u0027sharenfs\u0027: self.configuration.nexenta_nfs,\r"},{"line_number":66,"context_line":"                               }\r"},{"line_number":67,"context_line":"        if not self.nms.folder.object_exists(folder):\r"},{"line_number":68,"context_line":"            self.nms.folder.create_with_props(\r"},{"line_number":69,"context_line":"                self.volume, self.share, create_folder_props)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7f9b3273","line":66,"range":{"start_line":62,"start_character":8,"end_line":66,"end_character":32},"updated":"2016-05-12 14:00:07.000000000","message":"Please, follow these guidelines: http://docs.openstack.org/developer/hacking/#dictionaries-lists\n\nSame for all other such occurrences.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"2ebac1ca258db15da3be85b4db438a4ff002834a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            raise LookupError(_(\"Volume %s does not exist in Nexenta\"\r"},{"line_number":60,"context_line":"                                \"Stor appliance\"), self.volume)\r"},{"line_number":61,"context_line":"        folder \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":62,"context_line":"        create_folder_props \u003d {\u0027recordsize\u0027: \u00274K\u0027,\r"},{"line_number":63,"context_line":"                               \u0027quota\u0027: \u0027none\u0027,\r"},{"line_number":64,"context_line":"                               \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":65,"context_line":"                               \u0027sharenfs\u0027: self.configuration.nexenta_nfs,\r"},{"line_number":66,"context_line":"                               }\r"},{"line_number":67,"context_line":"        if not self.nms.folder.object_exists(folder):\r"},{"line_number":68,"context_line":"            self.nms.folder.create_with_props(\r"},{"line_number":69,"context_line":"                self.volume, self.share, create_folder_props)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_9ea24e99","line":66,"range":{"start_line":62,"start_character":8,"end_line":66,"end_character":32},"in_reply_to":"dab17558_7f9b3273","updated":"2016-05-13 18:46:22.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def _get_location_path(self, path, protocol):\r"},{"line_number":110,"context_line":"        location \u003d None\r"},{"line_number":111,"context_line":"        if protocol \u003d\u003d \u0027NFS\u0027:\r"},{"line_number":112,"context_line":"            location \u003d \u0027%s:/volumes/%s\u0027 % (self.nms_host, path)\r"},{"line_number":113,"context_line":"        else:\r"},{"line_number":114,"context_line":"            raise exception.InvalidShare(\r"},{"line_number":115,"context_line":"                reason\u003d(_(\u0027Invalid NAS protocol supplied: %s.\u0027)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_9f053616","line":112,"range":{"start_line":112,"start_character":12,"end_line":112,"end_character":63},"updated":"2016-05-12 14:00:07.000000000","message":"It is deprecated way of export location reporting. It is expected to be dict since Mitaka timeframe. See example here: https://github.com/openstack/manila/blob/bf24cdba/manila/share/drivers/zfsonlinux/utils.py#L205","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"2ebac1ca258db15da3be85b4db438a4ff002834a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def _get_location_path(self, path, protocol):\r"},{"line_number":110,"context_line":"        location \u003d None\r"},{"line_number":111,"context_line":"        if protocol \u003d\u003d \u0027NFS\u0027:\r"},{"line_number":112,"context_line":"            location \u003d \u0027%s:/volumes/%s\u0027 % (self.nms_host, path)\r"},{"line_number":113,"context_line":"        else:\r"},{"line_number":114,"context_line":"            raise exception.InvalidShare(\r"},{"line_number":115,"context_line":"                reason\u003d(_(\u0027Invalid NAS protocol supplied: %s.\u0027)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_5eaaa686","line":112,"range":{"start_line":112,"start_character":12,"end_line":112,"end_character":63},"in_reply_to":"dab17558_9f053616","updated":"2016-05-13 18:46:22.000000000","message":"Should I use get_exports() method here or just change to \nlocation \u003d {\n   \u0027path\u0027: \u0027%s:/volumes/%s\u0027 % (self.nms_host, path),\n}\n??","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            self.nms.snapshot.destroy(\u0027%s@%s\u0027 % (\r"},{"line_number":147,"context_line":"                self._get_share_path(share_name), snapshot_name), \u0027\u0027)\r"},{"line_number":148,"context_line":"        except exception.NexentaException as exc:\r"},{"line_number":149,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:\r"},{"line_number":150,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s does not \u0027\r"},{"line_number":151,"context_line":"                             \u0027exist, it was already deleted.\u0027),\r"},{"line_number":152,"context_line":"                         {\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7fa69254","line":149,"range":{"start_line":149,"start_character":12,"end_line":149,"end_character":47},"updated":"2016-05-12 14:00:07.000000000","message":"Is there any possibility to depend on return codes and not exception message? Dependency on exception message is very fragile approach that is better to avoid if possible.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"2ebac1ca258db15da3be85b4db438a4ff002834a","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            self.nms.snapshot.destroy(\u0027%s@%s\u0027 % (\r"},{"line_number":147,"context_line":"                self._get_share_path(share_name), snapshot_name), \u0027\u0027)\r"},{"line_number":148,"context_line":"        except exception.NexentaException as exc:\r"},{"line_number":149,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:\r"},{"line_number":150,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s does not \u0027\r"},{"line_number":151,"context_line":"                             \u0027exist, it was already deleted.\u0027),\r"},{"line_number":152,"context_line":"                         {\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_4145a715","line":149,"range":{"start_line":149,"start_character":12,"end_line":149,"end_character":47},"in_reply_to":"dab17558_7fa69254","updated":"2016-05-13 18:46:22.000000000","message":"unfortunately that\u0027s not possible on NS4 since it only returns the message. But I don\u0027t think it\u0027s significant in this case since these are only 2 cases when we do not want to raise, so it should be fine.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"d09359dc75518c89cbabc016b29d8eaae4abf893","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        self._share_folder(path)\r"},{"line_number":174,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])\r"},{"line_number":175,"context_line":"\r"},{"line_number":176,"context_line":"    def _update_access(self, share_id, access_rules):\r"},{"line_number":177,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"},{"line_number":178,"context_line":"        rw_list \u003d []\r"},{"line_number":179,"context_line":"        ro_list \u003d []\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_badc4719","line":176,"range":{"start_line":176,"start_character":29,"end_line":176,"end_character":37},"updated":"2016-05-13 13:58:34.000000000","message":"share_name?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        self._share_folder(path)\r"},{"line_number":174,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])\r"},{"line_number":175,"context_line":"\r"},{"line_number":176,"context_line":"    def _update_access(self, share_id, access_rules):\r"},{"line_number":177,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"},{"line_number":178,"context_line":"        rw_list \u003d []\r"},{"line_number":179,"context_line":"        ro_list \u003d []\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_6b7cc1eb","line":176,"range":{"start_line":176,"start_character":29,"end_line":176,"end_character":37},"in_reply_to":"dab17558_badc4719","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"d09359dc75518c89cbabc016b29d8eaae4abf893","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])\r"},{"line_number":175,"context_line":"\r"},{"line_number":176,"context_line":"    def _update_access(self, share_id, access_rules):\r"},{"line_number":177,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"},{"line_number":178,"context_line":"        rw_list \u003d []\r"},{"line_number":179,"context_line":"        ro_list \u003d []\r"},{"line_number":180,"context_line":"        for rule in access_rules:\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_3a969794","line":177,"range":{"start_line":177,"start_character":11,"end_line":177,"end_character":23},"updated":"2016-05-13 13:58:34.000000000","message":"Update access? This function not just implement allow access?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])\r"},{"line_number":175,"context_line":"\r"},{"line_number":176,"context_line":"    def _update_access(self, share_id, access_rules):\r"},{"line_number":177,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"},{"line_number":178,"context_line":"        rw_list \u003d []\r"},{"line_number":179,"context_line":"        ro_list \u003d []\r"},{"line_number":180,"context_line":"        for rule in access_rules:\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_cb832dcb","line":177,"range":{"start_line":177,"start_character":11,"end_line":177,"end_character":23},"in_reply_to":"dab17558_3a969794","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"d09359dc75518c89cbabc016b29d8eaae4abf893","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                msg \u003d _(\u0027Only IP access type is supported.\u0027)\r"},{"line_number":183,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)\r"},{"line_number":184,"context_line":"            else:\r"},{"line_number":185,"context_line":"                if rule[\u0027access_level\u0027] \u003d\u003d \u0027rw\u0027:\r"},{"line_number":186,"context_line":"                    rw_list.append(rule[\u0027access_to\u0027])\r"},{"line_number":187,"context_line":"                else:\r"},{"line_number":188,"context_line":"                    ro_list.append(rule[\u0027access_to\u0027])\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_57537639","line":185,"range":{"start_line":185,"start_character":43,"end_line":185,"end_character":47},"updated":"2016-05-13 13:58:34.000000000","message":"from manila.common import constants as common\nUse common.ACCESS_LEVEL_RW instead of \u0027rw\u0027.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                msg \u003d _(\u0027Only IP access type is supported.\u0027)\r"},{"line_number":183,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)\r"},{"line_number":184,"context_line":"            else:\r"},{"line_number":185,"context_line":"                if rule[\u0027access_level\u0027] \u003d\u003d \u0027rw\u0027:\r"},{"line_number":186,"context_line":"                    rw_list.append(rule[\u0027access_to\u0027])\r"},{"line_number":187,"context_line":"                else:\r"},{"line_number":188,"context_line":"                    ro_list.append(rule[\u0027access_to\u0027])\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_0b6ed52e","line":185,"range":{"start_line":185,"start_character":43,"end_line":185,"end_character":47},"in_reply_to":"dab17558_57537639","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":213,"context_line":"\r"},{"line_number":214,"context_line":"    def _update_share_stats(self):\r"},{"line_number":215,"context_line":"        total, free, allocated \u003d self._get_capacity_info(self.share)\r"},{"line_number":216,"context_line":"        return dict(\r"},{"line_number":217,"context_line":"            vendor_name\u003d\u0027Nexenta\u0027,\r"},{"line_number":218,"context_line":"            storage_protocol\u003dself.storage_protocol,\r"},{"line_number":219,"context_line":"            total_capacity_gb\u003dtotal,\r"},{"line_number":220,"context_line":"            free_capacity_gb\u003dfree,\r"},{"line_number":221,"context_line":"            reserved_percentage\u003dself.configuration.reserved_share_percentage,\r"},{"line_number":222,"context_line":"            nfs_mount_point_base\u003dself.nfs_mount_point_base,\r"},{"line_number":223,"context_line":"            thin_provisioning\u003dself.configuration.nexenta_thin_provisioning,\r"},{"line_number":224,"context_line":"            max_over_subscription_ratio\u003d(\r"},{"line_number":225,"context_line":"                        self.configuration.safe_get(\r"},{"line_number":226,"context_line":"                            \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":227,"context_line":"            compression\u003dself.dataset_compression,\r"},{"line_number":228,"context_line":"            dedupe\u003dself.dataset_dedupe,\r"},{"line_number":229,"context_line":"        )\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_ff5d627a","line":229,"range":{"start_line":216,"start_character":8,"end_line":229,"end_character":9},"updated":"2016-05-12 14:00:07.000000000","message":"Please, use dict comprehension {} instead of \"dict\" class. It works much faster.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":213,"context_line":"\r"},{"line_number":214,"context_line":"    def _update_share_stats(self):\r"},{"line_number":215,"context_line":"        total, free, allocated \u003d self._get_capacity_info(self.share)\r"},{"line_number":216,"context_line":"        return dict(\r"},{"line_number":217,"context_line":"            vendor_name\u003d\u0027Nexenta\u0027,\r"},{"line_number":218,"context_line":"            storage_protocol\u003dself.storage_protocol,\r"},{"line_number":219,"context_line":"            total_capacity_gb\u003dtotal,\r"},{"line_number":220,"context_line":"            free_capacity_gb\u003dfree,\r"},{"line_number":221,"context_line":"            reserved_percentage\u003dself.configuration.reserved_share_percentage,\r"},{"line_number":222,"context_line":"            nfs_mount_point_base\u003dself.nfs_mount_point_base,\r"},{"line_number":223,"context_line":"            thin_provisioning\u003dself.configuration.nexenta_thin_provisioning,\r"},{"line_number":224,"context_line":"            max_over_subscription_ratio\u003d(\r"},{"line_number":225,"context_line":"                        self.configuration.safe_get(\r"},{"line_number":226,"context_line":"                            \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":227,"context_line":"            compression\u003dself.dataset_compression,\r"},{"line_number":228,"context_line":"            dedupe\u003dself.dataset_dedupe,\r"},{"line_number":229,"context_line":"        )\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_4b78ddf2","line":229,"range":{"start_line":216,"start_character":8,"end_line":229,"end_character":9},"in_reply_to":"dab17558_ff5d627a","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"934930f0fa274c19da8f60574feabb621eaab8e5","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            path \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":74,"context_line":"            self._share_folder(path)\r"},{"line_number":75,"context_line":"\r"},{"line_number":76,"context_line":"    def _create_filesystem(self, share):\r"},{"line_number":77,"context_line":"        \"\"\"Create file system.\"\"\"\r"},{"line_number":78,"context_line":"        create_folder_props \u003d {\r"},{"line_number":79,"context_line":"            \u0027recordsize\u0027: \u00274K\u0027,\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_f00f0386","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":26},"updated":"2016-05-19 13:09:33.000000000","message":"This method is defined as private but it is being called by the NexentaNasDriver class. It should be public.","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            path \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":74,"context_line":"            self._share_folder(path)\r"},{"line_number":75,"context_line":"\r"},{"line_number":76,"context_line":"    def _create_filesystem(self, share):\r"},{"line_number":77,"context_line":"        \"\"\"Create file system.\"\"\"\r"},{"line_number":78,"context_line":"        create_folder_props \u003d {\r"},{"line_number":79,"context_line":"            \u0027recordsize\u0027: \u00274K\u0027,\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_61617d39","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":26},"in_reply_to":"bab6814e_f00f0386","updated":"2016-05-23 14:35:29.000000000","message":"Done","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"934930f0fa274c19da8f60574feabb621eaab8e5","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":82,"context_line":"            \u0027sharenfs\u0027: self.nfs,\r"},{"line_number":83,"context_line":"        }\r"},{"line_number":84,"context_line":"        if self.configuration.nexenta_thin_provisioning is not True:\r"},{"line_number":85,"context_line":"            create_folder_props[\u0027reservation\u0027] \u003d \u0027%sG\u0027 % share[\u0027size\u0027]\r"},{"line_number":86,"context_line":"\r"},{"line_number":87,"context_line":"        parent_path \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_6430769f","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":68},"updated":"2016-05-19 13:09:33.000000000","message":"if not self.configuration.nexenta_thin_provisioning:","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":82,"context_line":"            \u0027sharenfs\u0027: self.nfs,\r"},{"line_number":83,"context_line":"        }\r"},{"line_number":84,"context_line":"        if self.configuration.nexenta_thin_provisioning is not True:\r"},{"line_number":85,"context_line":"            create_folder_props[\u0027reservation\u0027] \u003d \u0027%sG\u0027 % share[\u0027size\u0027]\r"},{"line_number":86,"context_line":"\r"},{"line_number":87,"context_line":"        parent_path \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_efee7620","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":68},"in_reply_to":"bab6814e_6430769f","updated":"2016-05-23 14:35:29.000000000","message":"Done","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"934930f0fa274c19da8f60574feabb621eaab8e5","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self.nms.folder.create_with_props(\r"},{"line_number":89,"context_line":"            parent_path, share[\u0027name\u0027], create_folder_props)\r"},{"line_number":90,"context_line":"\r"},{"line_number":91,"context_line":"        path \u003d self._get_share_path(share[\u0027name\u0027])\r"},{"line_number":92,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])\r"},{"line_number":93,"context_line":"\r"},{"line_number":94,"context_line":"    def _share_folder(self, path):\r"},{"line_number":95,"context_line":"        share_opts \u003d {\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_a4b89ee6","line":92,"range":{"start_line":91,"start_character":0,"end_line":92,"end_character":66},"updated":"2016-05-19 13:09:33.000000000","message":"Don\u0027t you need to call _share_folder here like you do on _create_share_from_snapshot?","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self.nms.folder.create_with_props(\r"},{"line_number":89,"context_line":"            parent_path, share[\u0027name\u0027], create_folder_props)\r"},{"line_number":90,"context_line":"\r"},{"line_number":91,"context_line":"        path \u003d self._get_share_path(share[\u0027name\u0027])\r"},{"line_number":92,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])\r"},{"line_number":93,"context_line":"\r"},{"line_number":94,"context_line":"    def _share_folder(self, path):\r"},{"line_number":95,"context_line":"        share_opts \u003d {\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_41f27970","line":92,"range":{"start_line":91,"start_character":0,"end_line":92,"end_character":66},"in_reply_to":"bab6814e_a4b89ee6","updated":"2016-05-23 14:35:29.000000000","message":"actually not, more like I forgot to remove it in create_from_snap. thanks for the catch.","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"934930f0fa274c19da8f60574feabb621eaab8e5","unresolved":false,"context_lines":[{"line_number":93,"context_line":"\r"},{"line_number":94,"context_line":"    def _share_folder(self, path):\r"},{"line_number":95,"context_line":"        share_opts \u003d {\r"},{"line_number":96,"context_line":"            \u0027read_write\u0027: \u0027*\u0027,\r"},{"line_number":97,"context_line":"            \u0027read_only\u0027: \u0027\u0027,\r"},{"line_number":98,"context_line":"            \u0027root\u0027: \u0027nobody\u0027,\r"},{"line_number":99,"context_line":"            \u0027extra_options\u0027: \u0027anon\u003d0\u0027,\r"},{"line_number":100,"context_line":"            \u0027recursive\u0027: \u0027true\u0027,\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_a45c1eee","line":97,"range":{"start_line":96,"start_character":0,"end_line":97,"end_character":28},"updated":"2016-05-19 13:09:33.000000000","message":"Why are these different? Asterisk means everyone?","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":93,"context_line":"\r"},{"line_number":94,"context_line":"    def _share_folder(self, path):\r"},{"line_number":95,"context_line":"        share_opts \u003d {\r"},{"line_number":96,"context_line":"            \u0027read_write\u0027: \u0027*\u0027,\r"},{"line_number":97,"context_line":"            \u0027read_only\u0027: \u0027\u0027,\r"},{"line_number":98,"context_line":"            \u0027root\u0027: \u0027nobody\u0027,\r"},{"line_number":99,"context_line":"            \u0027extra_options\u0027: \u0027anon\u003d0\u0027,\r"},{"line_number":100,"context_line":"            \u0027recursive\u0027: \u0027true\u0027,\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_5e36d9e6","line":97,"range":{"start_line":96,"start_character":0,"end_line":97,"end_character":28},"in_reply_to":"bab6814e_a45c1eee","updated":"2016-05-23 14:35:29.000000000","message":"yes and this method is now removed.","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"934930f0fa274c19da8f60574feabb621eaab8e5","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        try:\r"},{"line_number":127,"context_line":"            self.nms.folder.destroy(folder.strip(), \u0027-r\u0027)\r"},{"line_number":128,"context_line":"        except exception.NexentaException as exc:\r"},{"line_number":129,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:\r"},{"line_number":130,"context_line":"                LOG.info(_LI(\u0027Folder %s does not exist, it was \u0027\r"},{"line_number":131,"context_line":"                             \u0027already deleted.\u0027), folder)\r"},{"line_number":132,"context_line":"                return\r"},{"line_number":133,"context_line":"            raise\r"},{"line_number":134,"context_line":"\r"},{"line_number":135,"context_line":"    def _get_share_path(self, share_name):\r"},{"line_number":136,"context_line":"        return \u0027%s/%s/%s\u0027 % (self.volume, self.share, share_name)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_46b1f98e","line":133,"range":{"start_line":129,"start_character":0,"end_line":133,"end_character":17},"updated":"2016-05-19 13:09:33.000000000","message":"Please change to use excutils.save_and_reraise_exception:\n\n    with excutils.save_and_reraise_exception as exc:\n        if \u0027does not exist\u0027 in exc.args[0]:\n           LOG.info(_LI(\u0027Folder %s does not exist, it was \u0027\n                        \u0027already deleted.\u0027), folder)\n           exc.reraise \u003d False","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        try:\r"},{"line_number":127,"context_line":"            self.nms.folder.destroy(folder.strip(), \u0027-r\u0027)\r"},{"line_number":128,"context_line":"        except exception.NexentaException as exc:\r"},{"line_number":129,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:\r"},{"line_number":130,"context_line":"                LOG.info(_LI(\u0027Folder %s does not exist, it was \u0027\r"},{"line_number":131,"context_line":"                             \u0027already deleted.\u0027), folder)\r"},{"line_number":132,"context_line":"                return\r"},{"line_number":133,"context_line":"            raise\r"},{"line_number":134,"context_line":"\r"},{"line_number":135,"context_line":"    def _get_share_path(self, share_name):\r"},{"line_number":136,"context_line":"        return \u0027%s/%s/%s\u0027 % (self.volume, self.share, share_name)\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_146f8dfc","line":133,"range":{"start_line":129,"start_character":0,"end_line":133,"end_character":17},"in_reply_to":"bab6814e_46b1f98e","updated":"2016-05-23 14:35:29.000000000","message":"Done","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"934930f0fa274c19da8f60574feabb621eaab8e5","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            self.nms.snapshot.destroy(\u0027%s@%s\u0027 % (\r"},{"line_number":151,"context_line":"                self._get_share_path(share_name), snapshot_name), \u0027\u0027)\r"},{"line_number":152,"context_line":"        except exception.NexentaException as exc:\r"},{"line_number":153,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:\r"},{"line_number":154,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s does not \u0027\r"},{"line_number":155,"context_line":"                             \u0027exist, it was already deleted.\u0027),\r"},{"line_number":156,"context_line":"                         {\r"},{"line_number":157,"context_line":"                             \u0027folder\u0027: share_name,\r"},{"line_number":158,"context_line":"                             \u0027snapshot\u0027: snapshot_name,\r"},{"line_number":159,"context_line":"                })\r"},{"line_number":160,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:\r"},{"line_number":161,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s has dependent \u0027\r"},{"line_number":162,"context_line":"                             \u0027clones, it will be deleted later.\u0027),\r"},{"line_number":163,"context_line":"                         {\r"},{"line_number":164,"context_line":"                             \u0027folder\u0027: share_name,\r"},{"line_number":165,"context_line":"                             \u0027snapshot\u0027: snapshot_name,\r"},{"line_number":166,"context_line":"                })\r"},{"line_number":167,"context_line":"            else:\r"},{"line_number":168,"context_line":"                raise\r"},{"line_number":169,"context_line":"\r"},{"line_number":170,"context_line":"    def _create_share_from_snapshot(self, share, snapshot):\r"},{"line_number":171,"context_line":"        snapshot_name \u003d \u0027%s/%s/%s@%s\u0027 % (\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_844e3a6d","line":168,"range":{"start_line":153,"start_character":0,"end_line":168,"end_character":21},"updated":"2016-05-19 13:09:33.000000000","message":"Please rewrite to use excutils.save_and_reraise_exception","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            self.nms.snapshot.destroy(\u0027%s@%s\u0027 % (\r"},{"line_number":151,"context_line":"                self._get_share_path(share_name), snapshot_name), \u0027\u0027)\r"},{"line_number":152,"context_line":"        except exception.NexentaException as exc:\r"},{"line_number":153,"context_line":"            if \u0027does not exist\u0027 in exc.args[0]:\r"},{"line_number":154,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s does not \u0027\r"},{"line_number":155,"context_line":"                             \u0027exist, it was already deleted.\u0027),\r"},{"line_number":156,"context_line":"                         {\r"},{"line_number":157,"context_line":"                             \u0027folder\u0027: share_name,\r"},{"line_number":158,"context_line":"                             \u0027snapshot\u0027: snapshot_name,\r"},{"line_number":159,"context_line":"                })\r"},{"line_number":160,"context_line":"            elif \u0027has dependent clones\u0027 in exc.args[0]:\r"},{"line_number":161,"context_line":"                LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s has dependent \u0027\r"},{"line_number":162,"context_line":"                             \u0027clones, it will be deleted later.\u0027),\r"},{"line_number":163,"context_line":"                         {\r"},{"line_number":164,"context_line":"                             \u0027folder\u0027: share_name,\r"},{"line_number":165,"context_line":"                             \u0027snapshot\u0027: snapshot_name,\r"},{"line_number":166,"context_line":"                })\r"},{"line_number":167,"context_line":"            else:\r"},{"line_number":168,"context_line":"                raise\r"},{"line_number":169,"context_line":"\r"},{"line_number":170,"context_line":"    def _create_share_from_snapshot(self, share, snapshot):\r"},{"line_number":171,"context_line":"        snapshot_name \u003d \u0027%s/%s/%s@%s\u0027 % (\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_af8aae61","line":168,"range":{"start_line":153,"start_character":0,"end_line":168,"end_character":21},"in_reply_to":"bab6814e_844e3a6d","updated":"2016-05-23 14:35:29.000000000","message":"Done","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"934930f0fa274c19da8f60574feabb621eaab8e5","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            else:\r"},{"line_number":168,"context_line":"                raise\r"},{"line_number":169,"context_line":"\r"},{"line_number":170,"context_line":"    def _create_share_from_snapshot(self, share, snapshot):\r"},{"line_number":171,"context_line":"        snapshot_name \u003d \u0027%s/%s/%s@%s\u0027 % (\r"},{"line_number":172,"context_line":"            self.volume, self.share, snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027])\r"},{"line_number":173,"context_line":"        self.nms.folder.clone(\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_6b45e8b1","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":35},"updated":"2016-05-19 13:09:33.000000000","message":"This method is private as well. Please change it to public. Same for other methods in this class.","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            else:\r"},{"line_number":168,"context_line":"                raise\r"},{"line_number":169,"context_line":"\r"},{"line_number":170,"context_line":"    def _create_share_from_snapshot(self, share, snapshot):\r"},{"line_number":171,"context_line":"        snapshot_name \u003d \u0027%s/%s/%s@%s\u0027 % (\r"},{"line_number":172,"context_line":"            self.volume, self.share, snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027])\r"},{"line_number":173,"context_line":"        self.nms.folder.clone(\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_0fec9a28","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":35},"in_reply_to":"bab6814e_6b45e8b1","updated":"2016-05-23 14:35:29.000000000","message":"Done","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"628b9c55b258048913e7dac05bd1e982fc45f663","unresolved":false,"context_lines":[{"line_number":58,"context_line":"\r"},{"line_number":59,"context_line":"    def check_for_setup_error(self):\r"},{"line_number":60,"context_line":"        if not self.nms.volume.object_exists(self.volume):\r"},{"line_number":61,"context_line":"            raise exception.NexentaException(_(\r"},{"line_number":62,"context_line":"                \"Volume %s does not exist in NexentaStor appliance\"),\r"},{"line_number":63,"context_line":"                self.volume)\r"},{"line_number":64,"context_line":"        folder \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":65,"context_line":"        create_folder_props \u003d {\r"},{"line_number":66,"context_line":"            \u0027recordsize\u0027: \u00274K\u0027,\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_6070cc0b","line":63,"range":{"start_line":61,"start_character":12,"end_line":63,"end_character":28},"updated":"2016-05-23 16:37:42.000000000","message":"Exception message won\u0027t have your volume in message. Replace \",\" with \"%\" and cover it with unit tests.","commit_id":"ab2180bbc5b04aeba555c5bfd1e35755171dc98d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from manila.common import constants as common\r"},{"line_number":20,"context_line":"from manila import exception\r"},{"line_number":21,"context_line":"from manila.i18n import _\r"},{"line_number":22,"context_line":"from manila.i18n import _LI\r"},{"line_number":23,"context_line":"from manila.share.drivers.nexenta import jsonrpc\r"},{"line_number":24,"context_line":"from manila.share.drivers.nexenta import utils\r"},{"line_number":25,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_e41ec56e","line":22,"updated":"2016-07-06 21:38:26.000000000","message":"Combine 21 and 22 into one line.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        if not self.nms.volume.object_exists(self.volume):\r"},{"line_number":61,"context_line":"            raise exception.NexentaException(_(\r"},{"line_number":62,"context_line":"                \"Volume %s does not exist in NexentaStor appliance\") %\r"},{"line_number":63,"context_line":"                self.volume)\r"},{"line_number":64,"context_line":"        folder \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":65,"context_line":"        create_folder_props \u003d {\r"},{"line_number":66,"context_line":"            \u0027recordsize\u0027: \u00274K\u0027,\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_ff000c03","line":63,"updated":"2016-07-06 21:38:26.000000000","message":"exception.NexentaException(reason\u003d_(…))  if you\u0027ve changed \"response\" to \"reason\".","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            \u0027max_over_subscription_ratio\u0027: (\r"},{"line_number":214,"context_line":"                self.configuration.safe_get(\r"},{"line_number":215,"context_line":"                    \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":216,"context_line":"            \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":217,"context_line":"            \u0027dedupe\u0027: self.dataset_dedupe,\r"},{"line_number":218,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_f009e832","line":216,"range":{"start_line":216,"start_character":27,"end_line":216,"end_character":51},"updated":"2016-07-04 14:49:23.000000000","message":"It should be boolean value in stats that are reported to scheduler. See [1].\n\n[1] http://docs.openstack.org/developer/manila/devref/capabilities_and_extra_specs.html#common-capabilities","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            \u0027max_over_subscription_ratio\u0027: (\r"},{"line_number":214,"context_line":"                self.configuration.safe_get(\r"},{"line_number":215,"context_line":"                    \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":216,"context_line":"            \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":217,"context_line":"            \u0027dedupe\u0027: self.dataset_dedupe,\r"},{"line_number":218,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_28dc3672","line":216,"range":{"start_line":216,"start_character":27,"end_line":216,"end_character":51},"in_reply_to":"1aa78d24_f009e832","updated":"2016-07-06 15:22:57.000000000","message":"fixing","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                self.configuration.safe_get(\r"},{"line_number":215,"context_line":"                    \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":216,"context_line":"            \u0027compression\u0027: self.dataset_compression,\r"},{"line_number":217,"context_line":"            \u0027dedupe\u0027: self.dataset_dedupe,\r"},{"line_number":218,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_bf3204f0","line":217,"updated":"2016-07-06 21:38:26.000000000","message":"For the scheduler to work properly, you need to report \u0027provisioned_capacity_gb\u0027 too.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.nms.folder.destroy(folder.strip(), \u0027-r\u0027)\r"},{"line_number":111,"context_line":"        except exception.NexentaException as e:\r"},{"line_number":112,"context_line":"            with excutils.save_and_reraise_exception() as exc:\r"},{"line_number":113,"context_line":"                if \u0027does not exist\u0027 in e.args[0]:\r"},{"line_number":114,"context_line":"                    LOG.info(_LI(\u0027Folder %s does not exist, it was \u0027\r"},{"line_number":115,"context_line":"                                 \u0027already deleted.\u0027), folder)\r"},{"line_number":116,"context_line":"                    exc.reraise \u003d False\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_cee46c0e","line":113,"updated":"2016-07-13 05:39:20.000000000","message":"\u0027does not exist\u0027 is referenced in multiple places. Can you make it a constant?","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                self._get_share_path(share_name), snapshot_name), \u0027\u0027)\r"},{"line_number":135,"context_line":"        except exception.NexentaException as e:\r"},{"line_number":136,"context_line":"            with excutils.save_and_reraise_exception() as exc:\r"},{"line_number":137,"context_line":"                if \u0027does not exist\u0027 in e.args[0]:\r"},{"line_number":138,"context_line":"                    LOG.info(_LI(\u0027Snapshot %(folder)s@%(snapshot)s does not \u0027\r"},{"line_number":139,"context_line":"                                 \u0027exist, it was already deleted.\u0027),\r"},{"line_number":140,"context_line":"                             {\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_2ef090c8","line":137,"updated":"2016-07-13 05:39:20.000000000","message":"Here","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                                 \u0027snapshot\u0027: snapshot_name,\r"},{"line_number":143,"context_line":"                    })\r"},{"line_number":144,"context_line":"                    exc.reraise \u003d False\r"},{"line_number":145,"context_line":"                elif \u0027has dependent clones\u0027 in e.args[0]:\r"},{"line_number":146,"context_line":"                    LOG.info(_LI(\r"},{"line_number":147,"context_line":"                        \u0027Snapshot %(folder)s@%(snapshot)s has dependent \u0027\r"},{"line_number":148,"context_line":"                        \u0027clones, it will be deleted later.\u0027), {\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_2ec7f064","line":145,"updated":"2016-07-13 05:39:20.000000000","message":"This is error prone.  Can you use a constant for \u0027has dependent clones\u0027?","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        return free + allocated, free, allocated\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"    def update_share_stats(self):\r"},{"line_number":202,"context_line":"        total, free, provisioned \u003d self._get_capacity_info(self.share)\r"},{"line_number":203,"context_line":"        compression \u003d False if self.dataset_compression \u003d\u003d \u0027off\u0027 else True\r"},{"line_number":204,"context_line":"        return {\r"},{"line_number":205,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_cec74c43","line":202,"updated":"2016-07-13 05:39:20.000000000","message":"This doesn\u0027t look right.  \u0027provisioned_capacity\u0027 should be the virtual capacity, not \"used\" capacity as calculated on line 198.  For example, you thin provisioned a 20GB share but you only used 5GB to store data.  In this example, 20GB is the provisioned capacity and 5GB is the used (or allocated) capacity.","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fbc7cdf487cdad5151f4412671e7525b497b056f","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        return free + allocated, free, allocated\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"    def update_share_stats(self):\r"},{"line_number":202,"context_line":"        total, free, provisioned \u003d self._get_capacity_info(self.share)\r"},{"line_number":203,"context_line":"        compression \u003d False if self.dataset_compression \u003d\u003d \u0027off\u0027 else True\r"},{"line_number":204,"context_line":"        return {\r"},{"line_number":205,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_9518911f","line":202,"in_reply_to":"1aa78d24_63dd74df","updated":"2016-07-13 15:39:12.000000000","message":"The scheduler does a guess but it assumes the backend is used by this one Manila setup which is not accurate.  Manila list also only shows what manila knows but it won\u0027t know about any share created outside of Manila.  Your backend could be shared.  You should report it based on what your backend knows.\n\nYour backend should know what has been provisioned versus what has been used (consumed).","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e0fc4fc1e479f121ee0ce5eadbf92e3296c71cf6","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        return free + allocated, free, allocated\r"},{"line_number":200,"context_line":"\r"},{"line_number":201,"context_line":"    def update_share_stats(self):\r"},{"line_number":202,"context_line":"        total, free, provisioned \u003d self._get_capacity_info(self.share)\r"},{"line_number":203,"context_line":"        compression \u003d False if self.dataset_compression \u003d\u003d \u0027off\u0027 else True\r"},{"line_number":204,"context_line":"        return {\r"},{"line_number":205,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_63dd74df","line":202,"in_reply_to":"1aa78d24_cec74c43","updated":"2016-07-13 14:58:32.000000000","message":"Looks like I misunderstood the definition here. But doesn\u0027t manila-api (or maybe sheduler) know the provisioned amount? This would be the sum of \u0027manila list\u0027 output sizes, right?","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91a3e9cbae9b173bd7c250edc6d397631584206e","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            \u0027%s/%s\u0027 % (self.volume, self.share), \u0027used|available\u0027)\r"},{"line_number":199,"context_line":"        free \u003d utils.str2gib_size(folder_props[\u0027available\u0027])\r"},{"line_number":200,"context_line":"        allocated \u003d utils.str2gib_size(folder_props[\u0027used\u0027])\r"},{"line_number":201,"context_line":"        return free + allocated, free, allocated\r"},{"line_number":202,"context_line":"\r"},{"line_number":203,"context_line":"    def update_share_stats(self):\r"},{"line_number":204,"context_line":"        total, free, allocated \u003d self._get_capacity_info(self.share)\r"}],"source_content_type":"text/x-python","patch_set":25,"id":"dada55a8_b17808f4","line":201,"updated":"2016-07-19 02:44:19.000000000","message":"The total should not be \"free+allocated\" because total should not change.  That is your total physical space.","commit_id":"c7e88e502de10c0cc1bab52e10bd09a3fe7c1dce"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"7e577b5a7f431be42e32ed4e1535ef06ef54183b","unresolved":false,"context_lines":[{"line_number":198,"context_line":"            \u0027%s/%s\u0027 % (self.volume, self.share), \u0027used|available\u0027)\r"},{"line_number":199,"context_line":"        free \u003d utils.str2gib_size(folder_props[\u0027available\u0027])\r"},{"line_number":200,"context_line":"        allocated \u003d utils.str2gib_size(folder_props[\u0027used\u0027])\r"},{"line_number":201,"context_line":"        return free + allocated, free, allocated\r"},{"line_number":202,"context_line":"\r"},{"line_number":203,"context_line":"    def update_share_stats(self):\r"},{"line_number":204,"context_line":"        total, free, allocated \u003d self._get_capacity_info(self.share)\r"}],"source_content_type":"text/x-python","patch_set":25,"id":"dada55a8_e8d39836","line":201,"in_reply_to":"dada55a8_b17808f4","updated":"2016-07-19 12:37:30.000000000","message":"All physical space is either free or used, so free + used (or allocated) is a constant value. There is no other way to see total capacity on this appliance","commit_id":"c7e88e502de10c0cc1bab52e10bd09a3fe7c1dce"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"91a3e9cbae9b173bd7c250edc6d397631584206e","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            \u0027storage_protocol\u0027: self.storage_protocol,\r"},{"line_number":209,"context_line":"            \u0027total_capacity_gb\u0027: total,\r"},{"line_number":210,"context_line":"            \u0027free_capacity_gb\u0027: free,\r"},{"line_number":211,"context_line":"            \u0027provisioned_capacity_gb\u0027: 0,\r"},{"line_number":212,"context_line":"            \u0027reserved_percentage\u0027: (\r"},{"line_number":213,"context_line":"                self.configuration.reserved_share_percentage),\r"},{"line_number":214,"context_line":"            \u0027nfs_mount_point_base\u0027: self.nfs_mount_point_base,\r"}],"source_content_type":"text/x-python","patch_set":25,"id":"dada55a8_d1cadc19","line":211,"updated":"2016-07-19 02:44:19.000000000","message":"If your backend really cannot keep track of provisioned_capacity_gb, it is better not to report it at all (remove line 211).  The scheduler will keep track of capacity provisioned in Manila and report provisioned_capacity_gb based on that if it is not reported by the driver.  Leave it as 0 means you have never provisioned anything and that will lead to over provisioning.\n\nCan you also add a note here saying that the backend cannot keep track of provisioned_capacity_gb, so don\u0027t report it and leave to the scheduler to estimate.","commit_id":"c7e88e502de10c0cc1bab52e10bd09a3fe7c1dce"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"7e577b5a7f431be42e32ed4e1535ef06ef54183b","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            \u0027storage_protocol\u0027: self.storage_protocol,\r"},{"line_number":209,"context_line":"            \u0027total_capacity_gb\u0027: total,\r"},{"line_number":210,"context_line":"            \u0027free_capacity_gb\u0027: free,\r"},{"line_number":211,"context_line":"            \u0027provisioned_capacity_gb\u0027: 0,\r"},{"line_number":212,"context_line":"            \u0027reserved_percentage\u0027: (\r"},{"line_number":213,"context_line":"                self.configuration.reserved_share_percentage),\r"},{"line_number":214,"context_line":"            \u0027nfs_mount_point_base\u0027: self.nfs_mount_point_base,\r"}],"source_content_type":"text/x-python","patch_set":25,"id":"dada55a8_a8f240d0","line":211,"in_reply_to":"dada55a8_d1cadc19","updated":"2016-07-19 12:37:30.000000000","message":"sure, will add a note here","commit_id":"c7e88e502de10c0cc1bab52e10bd09a3fe7c1dce"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a004470a0132e4ac405393e7e05f07560af4eeb5","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def check_for_setup_error(self):\r"},{"line_number":61,"context_line":"        if not self.nms.volume.object_exists(self.volume):\r"},{"line_number":62,"context_line":"            raise exception.NexentaException(reason\u003d_(\r"},{"line_number":63,"context_line":"                \"Volume %s does not exist in NexentaStor appliance\") %\r"},{"line_number":64,"context_line":"                self.volume)\r"},{"line_number":65,"context_line":"        folder \u003d \u0027%s/%s\u0027 % (self.volume, self.share)\r"},{"line_number":66,"context_line":"        create_folder_props \u003d {\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_479b7372","line":63,"range":{"start_line":63,"start_character":66,"end_line":63,"end_character":67},"updated":"2016-07-30 07:21:45.000000000","message":"period","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a004470a0132e4ac405393e7e05f07560af4eeb5","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            location \u003d {\u0027path\u0027: \u0027%s:/volumes/%s\u0027 % (self.nms_host, path)}\r"},{"line_number":102,"context_line":"        else:\r"},{"line_number":103,"context_line":"            raise exception.InvalidShare(\r"},{"line_number":104,"context_line":"                reason\u003d(_(\u0027Invalid NAS protocol supplied: %s.\u0027)\r"},{"line_number":105,"context_line":"                        % protocol))\r"},{"line_number":106,"context_line":"        return location\r"},{"line_number":107,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_4772534a","line":104,"range":{"start_line":104,"start_character":60,"end_line":104,"end_character":61},"updated":"2016-07-30 07:21:45.000000000","message":"Only NFS protocol is currently supported.","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a3e003b7dbc694b1353a3fc25aab4455977225cd","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        not returning any to let the scheduler estimate it.\r"},{"line_number":208,"context_line":"        \"\"\"\r"},{"line_number":209,"context_line":"        total, free, allocated \u003d self._get_capacity_info(self.share)\r"},{"line_number":210,"context_line":"        compression \u003d False if self.dataset_compression \u003d\u003d \u0027off\u0027 else True\r"},{"line_number":211,"context_line":"        return {\r"},{"line_number":212,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"},{"line_number":213,"context_line":"            \u0027storage_protocol\u0027: self.storage_protocol,\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"dada55a8_f9a93a91","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":74},"updated":"2016-07-27 09:56:46.000000000","message":"compression \u003d not self.dataset_compression \u003d\u003d \u0027off\u0027","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e043be7275b4c347c699079629260c9c19ccb967","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        not returning any to let the scheduler estimate it.\r"},{"line_number":208,"context_line":"        \"\"\"\r"},{"line_number":209,"context_line":"        total, free, allocated \u003d self._get_capacity_info(self.share)\r"},{"line_number":210,"context_line":"        compression \u003d False if self.dataset_compression \u003d\u003d \u0027off\u0027 else True\r"},{"line_number":211,"context_line":"        return {\r"},{"line_number":212,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"},{"line_number":213,"context_line":"            \u0027storage_protocol\u0027: self.storage_protocol,\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_63d3c760","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":74},"in_reply_to":"dada55a8_f9a93a91","updated":"2016-08-02 14:12:41.000000000","message":"Done","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a3e003b7dbc694b1353a3fc25aab4455977225cd","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                self.configuration.safe_get(\r"},{"line_number":222,"context_line":"                    \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":223,"context_line":"            \u0027compression\u0027: compression,\r"},{"line_number":224,"context_line":"            \u0027dedupe\u0027: self.dataset_dedupe,\r"},{"line_number":225,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"dada55a8_f9b2da04","line":224,"updated":"2016-07-27 09:56:46.000000000","message":"In PS15 was asked to add \"provisioned_capacity_gb\". See [1].\n\n[1] https://review.openstack.org/#/c/309286/15..28/manila/share/drivers/nexenta/nexenta_helper.py","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a004470a0132e4ac405393e7e05f07560af4eeb5","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                self.configuration.safe_get(\r"},{"line_number":222,"context_line":"                    \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":223,"context_line":"            \u0027compression\u0027: compression,\r"},{"line_number":224,"context_line":"            \u0027dedupe\u0027: self.dataset_dedupe,\r"},{"line_number":225,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_c7ae4397","line":224,"range":{"start_line":224,"start_character":22,"end_line":224,"end_character":41},"updated":"2016-07-30 07:21:45.000000000","message":"The nexenta_dataset_dedupe value could be \u0027on\u0027, \u0027off\u0027, \u0027sha256\u0027, \u0027verify\u0027, \u0027sha256, verify\u0027, but dedupe value can only be True and False. Please see the doc: https://github.com/openstack/manila/blob/master/doc/source/devref/capabilities_and_extra_specs.rst\n\nSo, please change the self.dataset_dedupe value to fit for dedupe vaule(like compression does), or you could use dataset_dedupe capability to report.","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e043be7275b4c347c699079629260c9c19ccb967","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                self.configuration.safe_get(\r"},{"line_number":222,"context_line":"                    \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":223,"context_line":"            \u0027compression\u0027: compression,\r"},{"line_number":224,"context_line":"            \u0027dedupe\u0027: self.dataset_dedupe,\r"},{"line_number":225,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_a3c93fae","line":224,"range":{"start_line":224,"start_character":22,"end_line":224,"end_character":41},"in_reply_to":"bacf61ea_5d6fbb2a","updated":"2016-08-02 14:12:41.000000000","message":"Done","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ea21ce6199521ccea6c849bd29bf435a73b6bdf8","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                self.configuration.safe_get(\r"},{"line_number":222,"context_line":"                    \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":223,"context_line":"            \u0027compression\u0027: compression,\r"},{"line_number":224,"context_line":"            \u0027dedupe\u0027: self.dataset_dedupe,\r"},{"line_number":225,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_5d6fbb2a","line":224,"range":{"start_line":224,"start_character":22,"end_line":224,"end_character":41},"in_reply_to":"bacf61ea_c7ae4397","updated":"2016-07-31 01:48:43.000000000","message":"+1, probably do the same thing that you do for compression... \n\n dedupe \u003d not self.dataset_dedupe \u003d\u003d \u0027off\u0027","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"2149dfc82ec197191b17dac24256938bb1c8cd47","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                self.configuration.safe_get(\r"},{"line_number":222,"context_line":"                    \u0027max_over_subscription_ratio\u0027)),\r"},{"line_number":223,"context_line":"            \u0027compression\u0027: compression,\r"},{"line_number":224,"context_line":"            \u0027dedupe\u0027: self.dataset_dedupe,\r"},{"line_number":225,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_77f19acd","line":224,"in_reply_to":"dada55a8_f9b2da04","updated":"2016-07-27 16:01:49.000000000","message":"There is no way of tracking this value for ns4 backend, so in discussion with xing-yang we concluded that best option is to leave this for scheduler. I have added a comment about this in method description.","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"}],"manila/share/drivers/nexenta/nexenta_nas.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":61,"context_line":"\r"},{"line_number":62,"context_line":"    def do_setup(self, context):\r"},{"line_number":63,"context_line":"        \"\"\"Any initialization the nexenta nas driver does while starting.\"\"\"\r"},{"line_number":64,"context_line":"        LOG.debug(\"Do setup the plugin.\")\r"},{"line_number":65,"context_line":"        return self.helper.do_setup()\r"},{"line_number":66,"context_line":"\r"},{"line_number":67,"context_line":"    def check_for_setup_error(self):\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_3e120d63","line":64,"range":{"start_line":64,"start_character":19,"end_line":64,"end_character":38},"updated":"2016-04-22 15:52:10.000000000","message":"Setting up the plugin.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":71,"context_line":"\r"},{"line_number":72,"context_line":"    def create_share(self, context, share, share_server\u003dNone):\r"},{"line_number":73,"context_line":"        \"\"\"Create a share.\"\"\"\r"},{"line_number":74,"context_line":"        LOG.debug(\u0027Creating share: %s.\u0027 % share[\u0027name\u0027])\r"},{"line_number":75,"context_line":"        return self.helper._create_filesystem(share)\r"},{"line_number":76,"context_line":"\r"},{"line_number":77,"context_line":"    def create_share_from_snapshot(\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_0126d6b9","line":74,"range":{"start_line":74,"start_character":37,"end_line":74,"end_character":38},"updated":"2016-04-22 15:52:10.000000000","message":"please remove period when using \"xyzzy is: %s\" style logs.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        LOG.debug(\u0027Creating share: %s.\u0027 % share[\u0027name\u0027])\r"},{"line_number":75,"context_line":"        return self.helper._create_filesystem(share)\r"},{"line_number":76,"context_line":"\r"},{"line_number":77,"context_line":"    def create_share_from_snapshot(\r"},{"line_number":78,"context_line":"            self,\r"},{"line_number":79,"context_line":"            context,\r"},{"line_number":80,"context_line":"            share,\r"},{"line_number":81,"context_line":"            snapshot,\r"},{"line_number":82,"context_line":"            share_server\u003dNone):\r"},{"line_number":83,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\"\r"},{"line_number":84,"context_line":"        LOG.debug(\u0027Creating share from snapshot %s\u0027, snapshot[\u0027name\u0027])\r"},{"line_number":85,"context_line":"        return self.helper._create_share_from_snapshot(share, snapshot)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_417c4e72","line":82,"range":{"start_line":77,"start_character":0,"end_line":82,"end_character":31},"updated":"2016-04-22 15:52:10.000000000","message":"def create_share_from_snapshot(self, context, share, snapshot,\n                               share_server\u003dNone):","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            snapshot,\r"},{"line_number":82,"context_line":"            share_server\u003dNone):\r"},{"line_number":83,"context_line":"        \"\"\"Is called to create share from snapshot.\"\"\"\r"},{"line_number":84,"context_line":"        LOG.debug(\u0027Creating share from snapshot %s\u0027, snapshot[\u0027name\u0027])\r"},{"line_number":85,"context_line":"        return self.helper._create_share_from_snapshot(share, snapshot)\r"},{"line_number":86,"context_line":"\r"},{"line_number":87,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_e1ebda10","line":84,"range":{"start_line":84,"start_character":47,"end_line":84,"end_character":48},"updated":"2016-04-22 15:52:10.000000000","message":"Make your logs consistent... \n\n\"Creating share from snapshot: %s\"\n\nor \n\n\"Creating share from snapshot %s.\"","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":100,"context_line":"\r"},{"line_number":101,"context_line":"        snap_id \u003d self.helper._create_snapshot(\r"},{"line_number":102,"context_line":"            snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027])\r"},{"line_number":103,"context_line":"        LOG.info(_LI(\u0027Created snapshot id %s.\u0027), snap_id)\r"},{"line_number":104,"context_line":"\r"},{"line_number":105,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":106,"context_line":"        \"\"\"Delete a snapshot.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_8120264b","line":103,"range":{"start_line":103,"start_character":39,"end_line":103,"end_character":41},"updated":"2016-04-22 15:52:10.000000000","message":"remove id","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":104,"context_line":"\r"},{"line_number":105,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":106,"context_line":"        \"\"\"Delete a snapshot.\"\"\"\r"},{"line_number":107,"context_line":"        LOG.debug(\u0027Deleting a snapshot: %s.\u0027 % \u0027@\u0027.join(\r"},{"line_number":108,"context_line":"            [snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]]))\r"},{"line_number":109,"context_line":"\r"},{"line_number":110,"context_line":"        self.helper._delete_snapshot(snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_a11562e6","line":107,"range":{"start_line":107,"start_character":28,"end_line":107,"end_character":29},"updated":"2016-04-22 15:52:10.000000000","message":"remove \u0027a\u0027","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":104,"context_line":"\r"},{"line_number":105,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":106,"context_line":"        \"\"\"Delete a snapshot.\"\"\"\r"},{"line_number":107,"context_line":"        LOG.debug(\u0027Deleting a snapshot: %s.\u0027 % \u0027@\u0027.join(\r"},{"line_number":108,"context_line":"            [snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]]))\r"},{"line_number":109,"context_line":"\r"},{"line_number":110,"context_line":"        self.helper._delete_snapshot(snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027])\r"},{"line_number":111,"context_line":"        LOG.info(_LI(\u0027Deleted snapshot %s.\u0027), \u0027@\u0027.join(\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_21b792f6","line":108,"range":{"start_line":107,"start_character":45,"end_line":108,"end_character":55},"updated":"2016-04-22 15:52:10.000000000","message":"You should perform this out of the debug call..","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            [snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]]))\r"},{"line_number":109,"context_line":"\r"},{"line_number":110,"context_line":"        self.helper._delete_snapshot(snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027])\r"},{"line_number":111,"context_line":"        LOG.info(_LI(\u0027Deleted snapshot %s.\u0027), \u0027@\u0027.join(\r"},{"line_number":112,"context_line":"            [snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]]))\r"},{"line_number":113,"context_line":"\r"},{"line_number":114,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":115,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_61c98a79","line":112,"range":{"start_line":111,"start_character":46,"end_line":112,"end_character":55},"updated":"2016-04-22 15:52:10.000000000","message":"same","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        LOG.info(_LI(\u0027Deleted snapshot %s.\u0027), \u0027@\u0027.join(\r"},{"line_number":112,"context_line":"            [snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]]))\r"},{"line_number":113,"context_line":"\r"},{"line_number":114,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":115,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"},{"line_number":116,"context_line":"        LOG.debug(\"Allow access.\")\r"},{"line_number":117,"context_line":"        self.helper._allow_access(share[\u0027name\u0027], access, share[\u0027share_proto\u0027])\r"},{"line_number":118,"context_line":"\r"},{"line_number":119,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":120,"context_line":"        \"\"\"Deny access to the share.\"\"\"\r"},{"line_number":121,"context_line":"        LOG.debug(\"Deny access.\")\r"},{"line_number":122,"context_line":"        self.helper._deny_access(share[\u0027name\u0027], access, share[\u0027share_proto\u0027])\r"},{"line_number":123,"context_line":"\r"},{"line_number":124,"context_line":"    def _update_share_stats(self, data\u003dNone):\r"},{"line_number":125,"context_line":"        super(NexentaNasDriver, self)._update_share_stats()\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_4199ee6d","line":122,"range":{"start_line":114,"start_character":0,"end_line":122,"end_character":77},"updated":"2016-04-22 15:52:10.000000000","message":"Please implement update_access() \u003c-- these methods are deprecated since Mitaka and may be removed in Newton/Ocata..","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        LOG.info(_LI(\u0027Deleted snapshot %s.\u0027), \u0027@\u0027.join(\r"},{"line_number":112,"context_line":"            [snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]]))\r"},{"line_number":113,"context_line":"\r"},{"line_number":114,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":115,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"},{"line_number":116,"context_line":"        LOG.debug(\"Allow access.\")\r"},{"line_number":117,"context_line":"        self.helper._allow_access(share[\u0027name\u0027], access, share[\u0027share_proto\u0027])\r"},{"line_number":118,"context_line":"\r"},{"line_number":119,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":120,"context_line":"        \"\"\"Deny access to the share.\"\"\"\r"},{"line_number":121,"context_line":"        LOG.debug(\"Deny access.\")\r"},{"line_number":122,"context_line":"        self.helper._deny_access(share[\u0027name\u0027], access, share[\u0027share_proto\u0027])\r"},{"line_number":123,"context_line":"\r"},{"line_number":124,"context_line":"    def _update_share_stats(self, data\u003dNone):\r"},{"line_number":125,"context_line":"        super(NexentaNasDriver, self)._update_share_stats()\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_5c8b7f68","line":122,"range":{"start_line":114,"start_character":0,"end_line":122,"end_character":77},"in_reply_to":"1a122d0e_4199ee6d","updated":"2016-04-23 03:14:33.000000000","message":"+1","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        LOG.info(_LI(\u0027Deleted snapshot %s.\u0027), \u0027@\u0027.join(\r"},{"line_number":112,"context_line":"            [snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]]))\r"},{"line_number":113,"context_line":"\r"},{"line_number":114,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":115,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"},{"line_number":116,"context_line":"        LOG.debug(\"Allow access.\")\r"},{"line_number":117,"context_line":"        self.helper._allow_access(share[\u0027name\u0027], access, share[\u0027share_proto\u0027])\r"},{"line_number":118,"context_line":"\r"},{"line_number":119,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":120,"context_line":"        \"\"\"Deny access to the share.\"\"\"\r"},{"line_number":121,"context_line":"        LOG.debug(\"Deny access.\")\r"},{"line_number":122,"context_line":"        self.helper._deny_access(share[\u0027name\u0027], access, share[\u0027share_proto\u0027])\r"},{"line_number":123,"context_line":"\r"},{"line_number":124,"context_line":"    def _update_share_stats(self, data\u003dNone):\r"},{"line_number":125,"context_line":"        super(NexentaNasDriver, self)._update_share_stats()\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_7728e4e2","line":122,"range":{"start_line":114,"start_character":0,"end_line":122,"end_character":77},"updated":"2016-05-10 16:16:11.000000000","message":"you should implement \"update_access\" interface instead of allow and deny","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \"\"\"Do initialization.\"\"\"\r"},{"line_number":39,"context_line":"        LOG.debug(\u0027Initializing Nexenta driver.\u0027)\r"},{"line_number":40,"context_line":"        super(NexentaNasDriver, self).__init__(False, *args, **kwargs)\r"},{"line_number":41,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)\r"},{"line_number":42,"context_line":"        if self.configuration:\r"},{"line_number":43,"context_line":"            self.configuration.append_config_values(\r"},{"line_number":44,"context_line":"                options.nexenta_connection_opts)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_1f24a5ad","line":41,"range":{"start_line":41,"start_character":55,"end_line":41,"end_character":61},"updated":"2016-05-12 14:00:07.000000000","message":"None is set by default.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                _(\u0027Nexenta configuration missing.\u0027))\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"    @property\r"},{"line_number":55,"context_line":"    def share_backend_name(self):\r"},{"line_number":56,"context_line":"        share_backend_name \u003d None\r"},{"line_number":57,"context_line":"        if self.configuration:\r"},{"line_number":58,"context_line":"            share_backend_name \u003d self.configuration.safe_get(\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_1ff785f6","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":33},"updated":"2016-05-12 14:00:07.000000000","message":"This property is called on constant basis on each driver capability report and each time it is calculated.\n\nTo avoid redundant actions you should safe already calculated value and return it on second+ calls:\n\n\"\"\"\n@property\ndef share_backend_name(self):\n    if not hasattr(self, _share_backend_name):\n        self._share_backend_name \u003d None\n        if self.configuration:\n            self._share_backend_name \u003d self.configuration.safe_get(\n                \u0027share_backend_name\u0027)\n        if not self._share_backend_name:\n            self._share_backend_name \u003d \u0027NexentaStor4\u0027\n    return self._share_backend_name\n\"\"\"","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return share_backend_name\r"},{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"    def do_setup(self, context):\r"},{"line_number":65,"context_line":"        \"\"\"Any initialization the nexenta nas driver does while starting.\"\"\"\r"},{"line_number":66,"context_line":"        LOG.debug(\u0027Setting up the plugin.\u0027)\r"},{"line_number":67,"context_line":"        return self.helper.do_setup()\r"},{"line_number":68,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7fcdf185","line":65,"range":{"start_line":65,"start_character":34,"end_line":65,"end_character":45},"updated":"2016-05-12 14:00:07.000000000","message":"Nexenta NAS. \"NAS\" is abbreviation, it should not be used in lowercase.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"\r"},{"line_number":64,"context_line":"    def do_setup(self, context):\r"},{"line_number":65,"context_line":"        \"\"\"Any initialization the nexenta nas driver does while starting.\"\"\"\r"},{"line_number":66,"context_line":"        LOG.debug(\u0027Setting up the plugin.\u0027)\r"},{"line_number":67,"context_line":"        return self.helper.do_setup()\r"},{"line_number":68,"context_line":"\r"},{"line_number":69,"context_line":"    def check_for_setup_error(self):\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_dfa4ddba","line":66,"range":{"start_line":66,"start_character":19,"end_line":66,"end_character":41},"updated":"2016-05-12 14:00:07.000000000","message":"Which plugin? For which driver/backend?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ec1fe320d88369082b5df7f5efbc8946f37cc9a9","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        LOG.debug(\u0027Deleting share %s.\u0027 % share[\u0027name\u0027])\r"},{"line_number":88,"context_line":"        self.helper._delete_share(share[\u0027name\u0027])\r"},{"line_number":89,"context_line":"\r"},{"line_number":90,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":91,"context_line":"        \"\"\"Extends a share.\"\"\"\r"},{"line_number":92,"context_line":"        LOG.debug(\u0027Extending share %s to %sG.\u0027 % (share[\u0027name\u0027], new_size))\r"},{"line_number":93,"context_line":"        self.helper._set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":94,"context_line":"\r"},{"line_number":95,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":96,"context_line":"        \"\"\"Create a snapshot.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_244b0eb2","line":93,"range":{"start_line":90,"start_character":0,"end_line":93,"end_character":55},"updated":"2016-05-19 13:13:08.000000000","message":"Looks like you could easily implement shrink_share with little modification to this method. Just a suggestion","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        LOG.debug(\u0027Deleting share %s.\u0027 % share[\u0027name\u0027])\r"},{"line_number":88,"context_line":"        self.helper._delete_share(share[\u0027name\u0027])\r"},{"line_number":89,"context_line":"\r"},{"line_number":90,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":91,"context_line":"        \"\"\"Extends a share.\"\"\"\r"},{"line_number":92,"context_line":"        LOG.debug(\u0027Extending share %s to %sG.\u0027 % (share[\u0027name\u0027], new_size))\r"},{"line_number":93,"context_line":"        self.helper._set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":94,"context_line":"\r"},{"line_number":95,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":96,"context_line":"        \"\"\"Create a snapshot.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_7e2abd7f","line":93,"range":{"start_line":90,"start_character":0,"end_line":93,"end_character":55},"in_reply_to":"bab6814e_244b0eb2","updated":"2016-05-23 14:35:29.000000000","message":"Not really, unfortunately the backend does not allow setting a lesser quota than the dataset already has.","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from manila.share import driver\r"},{"line_number":21,"context_line":"from manila.share.drivers.nexenta import nexenta_helper\r"},{"line_number":22,"context_line":"from manila.share.drivers.nexenta import options\r"},{"line_number":23,"context_line":"\r"},{"line_number":24,"context_line":"\r"},{"line_number":25,"context_line":"VERSION \u003d \u00271.0\u0027\r"},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_1b96554c","line":23,"updated":"2016-07-04 14:49:23.000000000","message":"Why this module not called in the same way as \"ns5\" - \"ns4\"?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from manila.share import driver\r"},{"line_number":21,"context_line":"from manila.share.drivers.nexenta import nexenta_helper\r"},{"line_number":22,"context_line":"from manila.share.drivers.nexenta import options\r"},{"line_number":23,"context_line":"\r"},{"line_number":24,"context_line":"\r"},{"line_number":25,"context_line":"VERSION \u003d \u00271.0\u0027\r"},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_fedd3271","line":23,"in_reply_to":"1aa78d24_1b96554c","updated":"2016-07-06 15:22:57.000000000","message":"well, it was made before ns5 was out, so was no need to make subfolder back then. Probably makes sense to do so...","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            self.helper \u003d nexenta_helper.RestHelper(self.configuration)\r"},{"line_number":50,"context_line":"        else:\r"},{"line_number":51,"context_line":"            raise exception.BadConfigurationException(\r"},{"line_number":52,"context_line":"                _(\u0027Nexenta configuration missing.\u0027))\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"    @property\r"},{"line_number":55,"context_line":"    def share_backend_name(self):\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_df7a7087","line":52,"updated":"2016-07-06 21:38:26.000000000","message":"reason\u003d_(\u0027xxx\u0027)","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":73,"context_line":"\r"},{"line_number":74,"context_line":"    def create_share(self, context, share, share_server\u003dNone):\r"},{"line_number":75,"context_line":"        \"\"\"Create a share.\"\"\"\r"},{"line_number":76,"context_line":"        LOG.debug(\u0027Creating share %s.\u0027 % share[\u0027name\u0027])\r"},{"line_number":77,"context_line":"        return self.helper.create_filesystem(share)\r"},{"line_number":78,"context_line":"\r"},{"line_number":79,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_4e307c56","line":76,"updated":"2016-07-13 05:39:20.000000000","message":"% -\u003e ,","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":84,"context_line":"\r"},{"line_number":85,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):\r"},{"line_number":86,"context_line":"        \"\"\"Delete a share.\"\"\"\r"},{"line_number":87,"context_line":"        LOG.debug(\u0027Deleting share %s.\u0027 % share[\u0027name\u0027])\r"},{"line_number":88,"context_line":"        self.helper.delete_share(share[\u0027name\u0027])\r"},{"line_number":89,"context_line":"\r"},{"line_number":90,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_6e2d78fd","line":87,"updated":"2016-07-13 05:39:20.000000000","message":"% -\u003e ,","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":89,"context_line":"\r"},{"line_number":90,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":91,"context_line":"        \"\"\"Extends a share.\"\"\"\r"},{"line_number":92,"context_line":"        LOG.debug(\u0027Extending share %s to %sG.\u0027 % (share[\u0027name\u0027], new_size))\r"},{"line_number":93,"context_line":"        self.helper.set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":94,"context_line":"\r"},{"line_number":95,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_2ef1b095","line":92,"updated":"2016-07-13 05:39:20.000000000","message":"Please use keyword parameters:\n\nhttp://docs.openstack.org/developer/hacking/#internationalization-i18n-strings\n\nAlso it should be \",\" instead of %.","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":94,"context_line":"\r"},{"line_number":95,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":96,"context_line":"        \"\"\"Create a snapshot.\"\"\"\r"},{"line_number":97,"context_line":"        LOG.debug(\u0027Creating a snapshot of share %s.\u0027 % snapshot[\u0027share_name\u0027])\r"},{"line_number":98,"context_line":"        snap_id \u003d self.helper.create_snapshot(\r"},{"line_number":99,"context_line":"            snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027])\r"},{"line_number":100,"context_line":"        LOG.info(_LI(\u0027Created snapshot %s.\u0027), snap_id)\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_8e36e44e","line":97,"updated":"2016-07-13 05:39:20.000000000","message":"same","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":101,"context_line":"\r"},{"line_number":102,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":103,"context_line":"        \"\"\"Delete a snapshot.\"\"\"\r"},{"line_number":104,"context_line":"        LOG.debug(\u0027Deleting snapshot %s@%s.\u0027 % (\r"},{"line_number":105,"context_line":"            snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]))\r"},{"line_number":106,"context_line":"        self.helper.delete_snapshot(snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027])\r"},{"line_number":107,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_ce3c6c31","line":104,"updated":"2016-07-13 05:39:20.000000000","message":"same","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a3e003b7dbc694b1353a3fc25aab4455977225cd","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from manila.share.drivers.nexenta import options\r"},{"line_number":23,"context_line":"\r"},{"line_number":24,"context_line":"\r"},{"line_number":25,"context_line":"VERSION \u003d \u00271.0\u0027\r"},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)\r"},{"line_number":27,"context_line":"\r"},{"line_number":28,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"dada55a8_f9ae5a7f","line":25,"updated":"2016-07-27 09:56:46.000000000","message":"In PS15 you agreed to rename this module [1].\n\n[1] https://review.openstack.org/#/c/309286/15..28/manila/share/drivers/nexenta/nexenta_nas.py","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"}],"manila/share/drivers/nexenta/ns4/jsonrpc.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ae591150bc57e778ae071f965e4a14eece170b4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_log import log"},{"line_number":27,"context_line":"from oslo_serialization import jsonutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from manila.exception import NexentaException"},{"line_number":30,"context_line":"from manila.utils import retry"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":32,"id":"bacf61ea_a3131c64","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":45},"updated":"2016-08-05 14:19:53.000000000","message":"don\u0027t import objects, only import modules\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":83,"context_line":"            \u0027Authorization\u0027: \u0027Basic %s\u0027 % auth,"},{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":"        LOG.debug(\u0027Sending JSON data: %s\u0027, data)"},{"line_number":86,"context_line":"        r \u003d requests.post(self.url, data\u003ddata, headers\u003dheaders)"},{"line_number":87,"context_line":"        response \u003d json.loads(r.content) if r.content else None"},{"line_number":88,"context_line":"        LOG.debug(\u0027Got response: %s\u0027, response)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_bdf633d5","line":85,"range":{"start_line":85,"start_character":12,"end_line":85,"end_character":17},"updated":"2016-08-08 21:02:39.000000000","message":"Logging the data to and from every API call can make the log files very large.  Other drivers enable this level of logging with config options.  I suggest you do the same.\n\nhttps://github.com/openstack/manila/blob/master/manila/share/drivers/netapp/options.py#L105","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"a552115401cdb43222fdf873a3e418d6d6dc47f7","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":83,"context_line":"            \u0027Authorization\u0027: \u0027Basic %s\u0027 % auth,"},{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":"        LOG.debug(\u0027Sending JSON data: %s\u0027, data)"},{"line_number":86,"context_line":"        r \u003d requests.post(self.url, data\u003ddata, headers\u003dheaders)"},{"line_number":87,"context_line":"        response \u003d json.loads(r.content) if r.content else None"},{"line_number":88,"context_line":"        LOG.debug(\u0027Got response: %s\u0027, response)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_da022472","line":85,"range":{"start_line":85,"start_character":12,"end_line":85,"end_character":17},"in_reply_to":"9ad45d7e_bdf633d5","updated":"2016-08-19 09:03:48.000000000","message":"Isn\u0027t that what debug level is for? It feels redundant to create even more wrappers to control log level...","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"988129f03f18c464021aad3491c65d1afebd9cb5","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_log import log"},{"line_number":27,"context_line":"from oslo_serialization import jsonutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from manila.exception import NexentaException"},{"line_number":30,"context_line":"from manila.utils import retry"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"fa7ab95a_50b431f1","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":30},"updated":"2016-09-01 02:45:14.000000000","message":"Do not import objects or methods.. import modules","commit_id":"d66c03d7811af8337ff71e8082bd2504dad4e402"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1220e00defa187bafd07fb6b0fa8656dd2f1fe50","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_log import log"},{"line_number":27,"context_line":"from oslo_serialization import jsonutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from manila.exception import NexentaException"},{"line_number":30,"context_line":"from manila.utils import retry"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"fa7ab95a_ef62b83c","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":30},"in_reply_to":"fa7ab95a_50b431f1","updated":"2016-09-01 06:26:07.000000000","message":"+1 http://docs.openstack.org/developer/hacking/#imports\nfrom manila import exception\nfrom manila import utils","commit_id":"d66c03d7811af8337ff71e8082bd2504dad4e402"}],"manila/share/drivers/nexenta/ns4/nexenta_helper.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"719631c0a16ffafa49ac86e6b00597d6635c415d","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def update_access(self, share_name, access_rules):"},{"line_number":165,"context_line":"        \"\"\"Update access to the share.\"\"\""},{"line_number":166,"context_line":"        rw_list \u003d []"},{"line_number":167,"context_line":"        ro_list \u003d []"},{"line_number":168,"context_line":"        for rule in access_rules:"}],"source_content_type":"text/x-python","patch_set":31,"id":"bacf61ea_02b369ea","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":41},"updated":"2016-08-03 20:35:52.000000000","message":"same comment as in https://review.openstack.org/#/c/309286/31/manila/share/drivers/nexenta/ns5/nexenta_nas.py","commit_id":"9f71d860aa6d9c88badc8fe6e91854d08db37493"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Nexenta Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_03e60ab4","line":1,"updated":"2016-08-08 21:02:39.000000000","message":"Out of curiosity, why does the NS4 driver have a helper with most of the logic while the NS5 driver does not?  What is the point of a helper class if it isn\u0027t used by multiple modules?","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"a552115401cdb43222fdf873a3e418d6d6dc47f7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Nexenta Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_7a733816","line":1,"in_reply_to":"9ad45d7e_03e60ab4","updated":"2016-08-19 09:03:48.000000000","message":"We plan to add smb protocol too, so\nthe helper was created to separate top level method from rest api calls to make the code a bit more clean.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        return {"},{"line_number":215,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,"},{"line_number":216,"context_line":"            \u0027storage_protocol\u0027: self.storage_protocol,"},{"line_number":217,"context_line":"            \u0027total_capacity_gb\u0027: total,"},{"line_number":218,"context_line":"            \u0027free_capacity_gb\u0027: free,"},{"line_number":219,"context_line":"            \u0027reserved_percentage\u0027: ("},{"line_number":220,"context_line":"                self.configuration.reserved_share_percentage),"},{"line_number":221,"context_line":"            \u0027nfs_mount_point_base\u0027: self.nfs_mount_point_base,"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_4395a2e2","line":218,"range":{"start_line":217,"start_character":0,"end_line":218,"end_character":37},"updated":"2016-08-08 21:02:39.000000000","message":"Please report capacity using the pools mechanism, even if your backend only has one pool.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"a552115401cdb43222fdf873a3e418d6d6dc47f7","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        return {"},{"line_number":215,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,"},{"line_number":216,"context_line":"            \u0027storage_protocol\u0027: self.storage_protocol,"},{"line_number":217,"context_line":"            \u0027total_capacity_gb\u0027: total,"},{"line_number":218,"context_line":"            \u0027free_capacity_gb\u0027: free,"},{"line_number":219,"context_line":"            \u0027reserved_percentage\u0027: ("},{"line_number":220,"context_line":"                self.configuration.reserved_share_percentage),"},{"line_number":221,"context_line":"            \u0027nfs_mount_point_base\u0027: self.nfs_mount_point_base,"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_156dafcc","line":218,"range":{"start_line":217,"start_character":0,"end_line":218,"end_character":37},"in_reply_to":"9ad45d7e_4395a2e2","updated":"2016-08-19 09:03:48.000000000","message":"Done","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0486f921d3bbad948c793f89932e9a9597195aab","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            \u0027svc:/network/nfs/server:default\u0027,"},{"line_number":192,"context_line":"            self._get_share_path(share_name), share_opts)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _get_capacity_info(self, nfs_share):"},{"line_number":195,"context_line":"        \"\"\"Calculate available space on the NFS share."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        :param nfs_share: example 172.18.194.100:/var/nfs"}],"source_content_type":"text/x-python","patch_set":35,"id":"1ac06dbe_d4be4a63","line":194,"range":{"start_line":194,"start_character":33,"end_line":194,"end_character":42},"updated":"2016-08-25 08:42:37.000000000","message":"This parameter not be used.","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0486f921d3bbad948c793f89932e9a9597195aab","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    def _get_capacity_info(self, nfs_share):"},{"line_number":195,"context_line":"        \"\"\"Calculate available space on the NFS share."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        :param nfs_share: example 172.18.194.100:/var/nfs"},{"line_number":198,"context_line":"        \"\"\""},{"line_number":199,"context_line":"        folder_props \u003d self.nms.folder.get_child_props("},{"line_number":200,"context_line":"            \u0027%s/%s\u0027 % (self.volume, self.share), \u0027used|available\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"1ac06dbe_74b0368c","line":197,"range":{"start_line":197,"start_character":14,"end_line":197,"end_character":25},"updated":"2016-08-25 08:42:37.000000000","message":"?","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":27,"context_line":"DEP_CLONES \u003d \u0027has dependent clones\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class RestHelper(object):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self, configuration):"},{"line_number":33,"context_line":"        self.configuration \u003d configuration"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_02a18d94","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":25},"updated":"2016-08-26 17:17:27.000000000","message":"I\u0027m still trying to understand how you intend to add SMB support later.  I get that this file is NFS-specific, so it seems it should be called nexenta_nfs_helper.py and this class should be NFSHelper.\n\nDo you plan to read the protocol config option and load *either* the NFS helper or the SMB helper from ns4/nexenta_nas.py?  That would seem to work with minimal changes.  If that isn\u0027t the plan, please explain how you will add SMB without much heavier refactoring.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"DEP_CLONES \u003d \u0027has dependent clones\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class RestHelper(object):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self, configuration):"},{"line_number":33,"context_line":"        self.configuration \u003d configuration"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_aef287d0","line":30,"range":{"start_line":30,"start_character":0,"end_line":30,"end_character":25},"in_reply_to":"fa7ab95a_02a18d94","updated":"2016-08-30 13:44:03.000000000","message":"Yes, I will keep this file nfs-only and if/when we add smb, we will make a separate smbhelper. I have renamed the file and class as you suggested.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            parent_path, share[\u0027name\u0027], create_folder_props)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        path \u003d self._get_share_path(share[\u0027name\u0027])"},{"line_number":90,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def set_quota(self, share_name, new_size):"},{"line_number":93,"context_line":"        if self.configuration.nexenta_thin_provisioning:"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_ac837acb","line":90,"range":{"start_line":90,"start_character":15,"end_line":90,"end_character":66},"updated":"2016-08-26 17:17:27.000000000","message":"Please return export location(s) as a list.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            parent_path, share[\u0027name\u0027], create_folder_props)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        path \u003d self._get_share_path(share[\u0027name\u0027])"},{"line_number":90,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def set_quota(self, share_name, new_size):"},{"line_number":93,"context_line":"        if self.configuration.nexenta_thin_provisioning:"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_ee180f87","line":90,"range":{"start_line":90,"start_character":15,"end_line":90,"end_character":66},"in_reply_to":"fa7ab95a_ac837acb","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"\"\"Create a snapshot.\"\"\""},{"line_number":127,"context_line":"        folder \u003d self._get_share_path(share_name)"},{"line_number":128,"context_line":"        self.nms.folder.create_snapshot(folder, snapshot_name, \u0027-r\u0027)"},{"line_number":129,"context_line":"        return \u0027%s@%s\u0027 % (folder, snapshot_name)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def delete_snapshot(self, share_name, snapshot_name):"},{"line_number":132,"context_line":"        \"\"\"Deletes snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_c71417f7","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":48},"updated":"2016-08-26 17:17:27.000000000","message":"Not required, but you do have the opportunity here to return a model_update with the provider location.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        \"\"\"Create a snapshot.\"\"\""},{"line_number":127,"context_line":"        folder \u003d self._get_share_path(share_name)"},{"line_number":128,"context_line":"        self.nms.folder.create_snapshot(folder, snapshot_name, \u0027-r\u0027)"},{"line_number":129,"context_line":"        return \u0027%s@%s\u0027 % (folder, snapshot_name)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def delete_snapshot(self, share_name, snapshot_name):"},{"line_number":132,"context_line":"        \"\"\"Deletes snapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_0e1c5376","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":48},"in_reply_to":"fa7ab95a_c71417f7","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            snapshot_name,"},{"line_number":160,"context_line":"            \u0027%s/%s/%s\u0027 % (self.volume, self.share, share[\u0027name\u0027]))"},{"line_number":161,"context_line":"        path \u003d self._get_share_path(share[\u0027name\u0027])"},{"line_number":162,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def update_access(self, share_name, access_rules):"},{"line_number":165,"context_line":"        \"\"\"Update access to the share."}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_873ccf94","line":162,"range":{"start_line":162,"start_character":8,"end_line":162,"end_character":66},"updated":"2016-08-26 17:17:27.000000000","message":"Please return export location(s) as a list.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            snapshot_name,"},{"line_number":160,"context_line":"            \u0027%s/%s/%s\u0027 % (self.volume, self.share, share[\u0027name\u0027]))"},{"line_number":161,"context_line":"        path \u003d self._get_share_path(share[\u0027name\u0027])"},{"line_number":162,"context_line":"        return self._get_location_path(path, share[\u0027share_proto\u0027])"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def update_access(self, share_name, access_rules):"},{"line_number":165,"context_line":"        \"\"\"Update access to the share."}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_6e0ddf3d","line":162,"range":{"start_line":162,"start_character":8,"end_line":162,"end_character":66},"in_reply_to":"fa7ab95a_873ccf94","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"}],"manila/share/drivers/nexenta/ns4/nexenta_nas.py":[{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":91,"context_line":"        \"\"\"Extends a share.\"\"\""},{"line_number":92,"context_line":"        LOG.debug(\u0027Extending share %(name)s to %(size)sG.\u0027, ("},{"line_number":93,"context_line":"            {\u0027name\u0027: share[\u0027name\u0027], \u0027size\u0027: new_size}))"},{"line_number":94,"context_line":"        self.helper.set_quota(share[\u0027name\u0027], new_size)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_5d8f3723","line":92,"range":{"start_line":92,"start_character":60,"end_line":92,"end_character":61},"updated":"2016-08-08 21:02:39.000000000","message":"Unnecessary parentheses.  Same below.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"a552115401cdb43222fdf873a3e418d6d6dc47f7","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":91,"context_line":"        \"\"\"Extends a share.\"\"\""},{"line_number":92,"context_line":"        LOG.debug(\u0027Extending share %(name)s to %(size)sG.\u0027, ("},{"line_number":93,"context_line":"            {\u0027name\u0027: share[\u0027name\u0027], \u0027size\u0027: new_size}))"},{"line_number":94,"context_line":"        self.helper.set_quota(share[\u0027name\u0027], new_size)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_55956786","line":92,"range":{"start_line":92,"start_character":60,"end_line":92,"end_character":61},"in_reply_to":"9ad45d7e_5d8f3723","updated":"2016-08-19 09:03:48.000000000","message":"Done","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"}],"manila/share/drivers/nexenta/ns5/jsonrpc.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Nexenta Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_dcf5cfed","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2016-04-23 03:14:33.000000000","message":"2016?","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"d09359dc75518c89cbabc016b29d8eaae4abf893","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import json"},{"line_number":24,"context_line":"import time"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from oslo_log import log as logging"},{"line_number":27,"context_line":"from oslo_serialization import jsonutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from manila.exception import NexentaException"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_bd30c108","line":29,"range":{"start_line":26,"start_character":0,"end_line":29,"end_character":15},"updated":"2016-05-13 13:58:34.000000000","message":"from oslo_log import log as logging\nfrom oslo_serialization import jsonutils\nimport requests","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import json"},{"line_number":24,"context_line":"import time"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from oslo_log import log as logging"},{"line_number":27,"context_line":"from oslo_serialization import jsonutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import requests"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from manila.exception import NexentaException"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_8bc76511","line":29,"range":{"start_line":26,"start_character":0,"end_line":29,"end_character":15},"in_reply_to":"dab17558_bd30c108","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class HTTP404Exception(Exception):"},{"line_number":37,"context_line":"    pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NexentaJSONProxy(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_45dc9c46","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":8},"updated":"2016-05-12 14:00:07.000000000","message":"It is not 404-like yet. It is equal to parent common \"Exception\". Also, where is it used?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class HTTP404Exception(Exception):"},{"line_number":37,"context_line":"    pass"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class NexentaJSONProxy(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_0b8a55bf","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":8},"in_reply_to":"dab17558_45dc9c46","updated":"2016-05-19 16:38:29.000000000","message":"My bad, forgot to delete this","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                message \u003d content.get("},{"line_number":114,"context_line":"                    \u0027message\u0027, \u0027Message is not specified by Nexenta REST\u0027)"},{"line_number":115,"context_line":"                raise NexentaException(message, code\u003dcontent[\u0027code\u0027])"},{"line_number":116,"context_line":"            raise Exception("},{"line_number":117,"context_line":"                \u0027Got bad response: {} {} {}\u0027.format(code, reason, content))"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_058e1427","line":116,"range":{"start_line":116,"start_character":18,"end_line":116,"end_character":28},"updated":"2016-05-12 14:00:07.000000000","message":"Please, use more specific exceptions.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                message \u003d content.get("},{"line_number":114,"context_line":"                    \u0027message\u0027, \u0027Message is not specified by Nexenta REST\u0027)"},{"line_number":115,"context_line":"                raise NexentaException(message, code\u003dcontent[\u0027code\u0027])"},{"line_number":116,"context_line":"            raise Exception("},{"line_number":117,"context_line":"                \u0027Got bad response: {} {} {}\u0027.format(code, reason, content))"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_8bbc856d","line":116,"range":{"start_line":116,"start_character":18,"end_line":116,"end_character":28},"in_reply_to":"dab17558_058e1427","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"19923f53567a65d5fe23f7272bdfb36e7ceabc98","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                response.close()"},{"line_number":98,"context_line":"        return content"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def checkError(self, response):"},{"line_number":101,"context_line":"        code \u003d response.status_code"},{"line_number":102,"context_line":"        if code not in (200, 201, 202):"},{"line_number":103,"context_line":"            reason \u003d response.reason"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_d639e9d8","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":18},"updated":"2016-05-20 07:06:11.000000000","message":"Should be check_error","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e8ae586ef51b1ddc22882bd802225e8a54fbb530","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                response.close()"},{"line_number":98,"context_line":"        return content"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def checkError(self, response):"},{"line_number":101,"context_line":"        code \u003d response.status_code"},{"line_number":102,"context_line":"        if code not in (200, 201, 202):"},{"line_number":103,"context_line":"            reason \u003d response.reason"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_54ae352e","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":18},"in_reply_to":"bab6814e_d639e9d8","updated":"2016-05-23 14:35:29.000000000","message":"Done","commit_id":"bd209d3eb52b16a1fec313659debf59518aa51c2"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"628b9c55b258048913e7dac05bd1e982fc45f663","unresolved":false,"context_lines":[{"line_number":24,"context_line":"import requests"},{"line_number":25,"context_line":"import time"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from oslo_log import log as logging"},{"line_number":28,"context_line":"from oslo_serialization import jsonutils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from manila.exception import NexentaException"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_3bdb957d","line":27,"range":{"start_line":27,"start_character":25,"end_line":27,"end_character":35},"updated":"2016-05-23 16:37:42.000000000","message":"Why do you use renaming? Manila uses original naming for this module.","commit_id":"ab2180bbc5b04aeba555c5bfd1e35755171dc98d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import base64"},{"line_number":23,"context_line":"import json"},{"line_number":24,"context_line":"import requests"},{"line_number":25,"context_line":"from requests.packages.urllib3.exceptions import InsecurePlatformWarning"},{"line_number":26,"context_line":"from requests.packages.urllib3.exceptions import InsecureRequestWarning"},{"line_number":27,"context_line":"import time"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_5bdc5d12","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":71},"updated":"2016-07-04 14:49:23.000000000","message":"http://docs.openstack.org/developer/hacking/#imports","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import base64"},{"line_number":23,"context_line":"import json"},{"line_number":24,"context_line":"import requests"},{"line_number":25,"context_line":"from requests.packages.urllib3.exceptions import InsecurePlatformWarning"},{"line_number":26,"context_line":"from requests.packages.urllib3.exceptions import InsecureRequestWarning"},{"line_number":27,"context_line":"import time"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_3e8bccc4","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":71},"in_reply_to":"1aa78d24_5bdc5d12","updated":"2016-07-06 15:22:57.000000000","message":"Done","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from oslo_log import log"},{"line_number":30,"context_line":"from oslo_serialization import jsonutils"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from manila.exception import NexentaException"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":35,"context_line":"requests.packages.urllib3.disable_warnings(InsecureRequestWarning)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_9b04057f","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":45},"updated":"2016-07-04 14:49:23.000000000","message":"http://docs.openstack.org/developer/hacking/#imports","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from oslo_log import log"},{"line_number":30,"context_line":"from oslo_serialization import jsonutils"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from manila.exception import NexentaException"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":35,"context_line":"requests.packages.urllib3.disable_warnings(InsecureRequestWarning)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_1e8890c4","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":45},"in_reply_to":"1aa78d24_9b04057f","updated":"2016-07-06 15:22:57.000000000","message":"Done","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            if content and \u0027code\u0027 in content:"},{"line_number":133,"context_line":"                message \u003d content.get("},{"line_number":134,"context_line":"                    \u0027message\u0027, \u0027Message is not specified by Nexenta REST\u0027)"},{"line_number":135,"context_line":"                raise NexentaException(message, code\u003dcontent[\u0027code\u0027])"},{"line_number":136,"context_line":"            raise NexentaException("},{"line_number":137,"context_line":"                \u0027Got bad response: {} {} {}\u0027.format(code, reason, content))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_1ff6b8f8","line":135,"updated":"2016-07-06 21:38:26.000000000","message":"raise exception.NexentaException(reason\u003dxxx) if you\u0027ve changed \"response\" to \"reason\".\n\nAlso message needs to be wrapped with _().","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                    \u0027message\u0027, \u0027Message is not specified by Nexenta REST\u0027)"},{"line_number":135,"context_line":"                raise NexentaException(message, code\u003dcontent[\u0027code\u0027])"},{"line_number":136,"context_line":"            raise NexentaException("},{"line_number":137,"context_line":"                \u0027Got bad response: {} {} {}\u0027.format(code, reason, content))"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_3fc8d4a7","line":137,"updated":"2016-07-06 21:38:26.000000000","message":"See above.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        self.check_error(response)"},{"line_number":92,"context_line":"        content \u003d json.loads(response.content) if response.content else None"},{"line_number":93,"context_line":"        LOG.debug(\"Got response: %s %s %s\","},{"line_number":94,"context_line":"                  response.status_code, response.reason, content)"},{"line_number":95,"context_line":"        response.close()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if response.status_code \u003d\u003d 202 and content:"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_6e62983f","line":94,"updated":"2016-07-13 05:39:20.000000000","message":"Use keyword parameters","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                time.sleep(1)"},{"line_number":102,"context_line":"                response \u003d session.get(url, verify\u003dFalse)"},{"line_number":103,"context_line":"                self.check_error(response)"},{"line_number":104,"context_line":"                LOG.debug(\"Got response: %s %s\", response.status_code,"},{"line_number":105,"context_line":"                          response.reason)"},{"line_number":106,"context_line":"                content \u003d json.loads("},{"line_number":107,"context_line":"                    response.content) if response.content else None"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_4e651c43","line":104,"updated":"2016-07-13 05:39:20.000000000","message":"Same","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            url, data\u003ddata, verify\u003dFalse)"},{"line_number":118,"context_line":"        content \u003d json.loads(response.content) if response.content else None"},{"line_number":119,"context_line":"        LOG.debug(\"Got response: %s %s %s\","},{"line_number":120,"context_line":"                  response.status_code, response.reason, content)"},{"line_number":121,"context_line":"        response.close()"},{"line_number":122,"context_line":"        return content[\u0027token\u0027]"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_ee56885a","line":120,"updated":"2016-07-13 05:39:20.000000000","message":"same","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                    reason\u003dmessage, code\u003dcontent[\u0027code\u0027])"},{"line_number":136,"context_line":"            raise exception.NexentaException("},{"line_number":137,"context_line":"                reason\u003d\u0027Got bad response: {} {} {}\u0027.format("},{"line_number":138,"context_line":"                    code, reason, content))"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_8ed264cf","line":138,"updated":"2016-07-13 05:39:20.000000000","message":"Use keyword parameters.  Also need _ for the message.","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"}],"manila/share/drivers/nexenta/ns5/nexenta_nas.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            self.configuration.append_config_values(\r"},{"line_number":52,"context_line":"                options.NEXENTA_DATASET_OPTS)\r"},{"line_number":53,"context_line":"        else:\r"},{"line_number":54,"context_line":"            raise exception.InvalidShare(_(\u0027Nexenta configuration missing.\u0027))\r"},{"line_number":55,"context_line":"\r"},{"line_number":56,"context_line":"        self.nef \u003d None\r"},{"line_number":57,"context_line":"        self.nef_protocol \u003d self.configuration.nexenta_rest_protocol\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_61686a22","line":54,"range":{"start_line":54,"start_character":28,"end_line":54,"end_character":40},"updated":"2016-04-22 15:52:10.000000000","message":"BadConfigurationException?","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":65,"context_line":"\r"},{"line_number":66,"context_line":"        self.storage_protocol \u003d \u0027NFS\u0027\r"},{"line_number":67,"context_line":"        self.nfs_mount_point_base \u003d self.configuration.nexenta_mount_point_base\r"},{"line_number":68,"context_line":"        self.dataset_compression \u003d \\\r"},{"line_number":69,"context_line":"            self.configuration.nexenta_dataset_compression\r"},{"line_number":70,"context_line":"\r"},{"line_number":71,"context_line":"    @property\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_a149e2b9","line":68,"range":{"start_line":68,"start_character":35,"end_line":68,"end_character":36},"updated":"2016-04-22 15:52:10.000000000","message":"please use paranthesis","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if self.configuration:\r"},{"line_number":75,"context_line":"            backend_name \u003d self.configuration.safe_get(\u0027share_backend_name\u0027)\r"},{"line_number":76,"context_line":"        if not backend_name:\r"},{"line_number":77,"context_line":"            backend_name \u003d self.__class__.__name__\r"},{"line_number":78,"context_line":"        return backend_name\r"},{"line_number":79,"context_line":"\r"},{"line_number":80,"context_line":"    def do_setup(self, context):\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_61d6aac4","line":77,"range":{"start_line":77,"start_character":27,"end_line":77,"end_character":50},"updated":"2016-04-22 15:52:10.000000000","message":"why not NexentaNAS instead of NexantaNasDriver","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"976c342e9ce01af2be3aa8e6a5b296d4a12c4e20","unresolved":false,"context_lines":[{"line_number":134,"context_line":"\r"},{"line_number":135,"context_line":"        try:\r"},{"line_number":136,"context_line":"            self._add_permission(share[\u0027name\u0027])\r"},{"line_number":137,"context_line":"        except Exception:\r"},{"line_number":138,"context_line":"            try:\r"},{"line_number":139,"context_line":"                url \u003d \u0027storage/pools/{}/filesystems/{}\u0027.format(\r"},{"line_number":140,"context_line":"                    self.pool_name,\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_6f2063f8","line":137,"updated":"2016-04-22 10:43:10.000000000","message":"Expecting an Exception here seems a little broad to me. Maybe you could expect a more specific type of exception here? Like NexentaException, as you do in create_share_from_snapshot.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                del security_contexts[i]\r"},{"line_number":318,"context_line":"                break\r"},{"line_number":319,"context_line":"        data \u003d {\"securityContexts\": security_contexts}\r"},{"line_number":320,"context_line":"        self.nef.put(url, data)\r"},{"line_number":321,"context_line":"\r"},{"line_number":322,"context_line":"    def _set_quota(self, share_name, new_size):\r"},{"line_number":323,"context_line":"        if self.configuration.nexenta_thin_provisioning:\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_a12a828e","line":320,"range":{"start_line":320,"start_character":30,"end_line":320,"end_character":31},"updated":"2016-04-22 15:52:10.000000000","message":"Please implement update_access instead..","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":438,"context_line":"\r"},{"line_number":439,"context_line":"        LOG.debug(\r"},{"line_number":440,"context_line":"            \u0027RW ACE for filesystem \u003c%s\u003e on Nexenta Store has been \u0027\r"},{"line_number":441,"context_line":"            \u0027successfully created\u0027, share_name)\r"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_e4012806","line":441,"range":{"start_line":441,"start_character":33,"end_line":441,"end_character":35},"updated":"2016-04-22 15:52:10.000000000","message":"period.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":65,"context_line":"\r"},{"line_number":66,"context_line":"        self.storage_protocol \u003d \u0027NFS\u0027\r"},{"line_number":67,"context_line":"        self.nfs_mount_point_base \u003d self.configuration.nexenta_mount_point_base\r"},{"line_number":68,"context_line":"        self.dataset_compression \u003d \\\r"},{"line_number":69,"context_line":"            self.configuration.nexenta_dataset_compression\r"},{"line_number":70,"context_line":"\r"},{"line_number":71,"context_line":"    @property\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_524a0e27","line":68,"range":{"start_line":68,"start_character":35,"end_line":68,"end_character":36},"updated":"2016-05-10 16:16:11.000000000","message":"use parenthesis instead","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            if e.kwargs[\u0027code\u0027] \u003d\u003d \u0027ENOENT\u0027:\r"},{"line_number":248,"context_line":"                LOG.warning(e.msg + e.kwargs[\u0027code\u0027])\r"},{"line_number":249,"context_line":"            else:\r"},{"line_number":250,"context_line":"                raise e\r"},{"line_number":251,"context_line":"\r"},{"line_number":252,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":253,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_32a94a91","line":250,"range":{"start_line":250,"start_character":16,"end_line":250,"end_character":23},"updated":"2016-05-10 16:16:11.000000000","message":"I believe just raise should be used here","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            else:\r"},{"line_number":250,"context_line":"                raise e\r"},{"line_number":251,"context_line":"\r"},{"line_number":252,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":253,"context_line":"        \"\"\"Allow access to the share.\"\"\"\r"},{"line_number":254,"context_line":"        LOG.debug(\"Allow access.\")\r"},{"line_number":255,"context_line":"\r"},{"line_number":256,"context_line":"        access_type \u003d access[\u0027access_type\u0027].strip()\r"},{"line_number":257,"context_line":"        if access_type !\u003d \u0027ip\u0027:\r"},{"line_number":258,"context_line":"            err_msg \u003d \u0027Access type \u003c{}\u003e not allowed. \u0027 \\\r"},{"line_number":259,"context_line":"                      \u0027Allowed type is \u003cip\u003e\u0027.format(access_type)\r"},{"line_number":260,"context_line":"            raise exception.InvalidInput(err_msg)\r"},{"line_number":261,"context_line":"\r"},{"line_number":262,"context_line":"        address_mask \u003d access[\u0027access_to\u0027].strip().split(\u0027/\u0027, 1)\r"},{"line_number":263,"context_line":"        address \u003d address_mask[0]\r"},{"line_number":264,"context_line":"        ls \u003d [{\"allow\": True, \"etype\": \"network\", \"entity\": address}]\r"},{"line_number":265,"context_line":"        if len(address_mask) \u003d\u003d 2:\r"},{"line_number":266,"context_line":"            try:\r"},{"line_number":267,"context_line":"                mask \u003d int(address_mask[1])\r"},{"line_number":268,"context_line":"                if mask !\u003d 32:\r"},{"line_number":269,"context_line":"                    ls[0][\u0027mask\u0027] \u003d mask\r"},{"line_number":270,"context_line":"            except Exception:\r"},{"line_number":271,"context_line":"                raise exception.InvalidInput(\r"},{"line_number":272,"context_line":"                    \u0027\u003c{}\u003e is not a valid access parameter\u0027.format(\r"},{"line_number":273,"context_line":"                        access[\u0027access_to\u0027]))\r"},{"line_number":274,"context_line":"\r"},{"line_number":275,"context_line":"        url \u003d \u0027nas/nfs/\u0027 + PATH_DELIMITER.join(\r"},{"line_number":276,"context_line":"            (self.pool_name, self.fs_prefix, share[\u0027name\u0027]))\r"},{"line_number":277,"context_line":"        res \u003d self.nef.get(url)\r"},{"line_number":278,"context_line":"\r"},{"line_number":279,"context_line":"        security_contexts \u003d res.get(\u0027securityContexts\u0027, [])\r"},{"line_number":280,"context_line":"\r"},{"line_number":281,"context_line":"        new_sc \u003d {\r"},{"line_number":282,"context_line":"            \"root\": ls,\r"},{"line_number":283,"context_line":"            \"securityModes\": [\"sys\"]\r"},{"line_number":284,"context_line":"        }\r"},{"line_number":285,"context_line":"\r"},{"line_number":286,"context_line":"        access_level \u003d access[\u0027access_level\u0027].strip()\r"},{"line_number":287,"context_line":"        if access_level \u003d\u003d \u0027rw\u0027:\r"},{"line_number":288,"context_line":"            new_sc[\u0027readWriteList\u0027] \u003d ls\r"},{"line_number":289,"context_line":"        elif access_level \u003d\u003d \u0027ro\u0027:\r"},{"line_number":290,"context_line":"            new_sc[\u0027readOnlyList\u0027] \u003d ls\r"},{"line_number":291,"context_line":"        else:\r"},{"line_number":292,"context_line":"            raise exception.InvalidInput(_(\r"},{"line_number":293,"context_line":"                \u0027Access level %s is not allowed in \u0027\r"},{"line_number":294,"context_line":"                \u0027Nexenta Store appliance\u0027), access_level)\r"},{"line_number":295,"context_line":"        security_contexts.append(new_sc)\r"},{"line_number":296,"context_line":"        data \u003d {\"securityContexts\": security_contexts}\r"},{"line_number":297,"context_line":"        self.nef.put(url, data)\r"},{"line_number":298,"context_line":"\r"},{"line_number":299,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):\r"},{"line_number":300,"context_line":"        \"\"\"Deny access to the share.\"\"\"\r"},{"line_number":301,"context_line":"        LOG.debug(\"Deny access.\")\r"},{"line_number":302,"context_line":"\r"},{"line_number":303,"context_line":"        address_mask \u003d access[\u0027access_to\u0027].strip().split(\u0027/\u0027)\r"},{"line_number":304,"context_line":"        address \u003d address_mask[0]\r"},{"line_number":305,"context_line":"        mask \u003d int(address_mask[1]) if len(address_mask) \u003e 1 else None\r"},{"line_number":306,"context_line":"        if mask \u003d\u003d 32:\r"},{"line_number":307,"context_line":"            mask \u003d None\r"},{"line_number":308,"context_line":"\r"},{"line_number":309,"context_line":"        url \u003d \u0027nas/nfs/\u0027 + PATH_DELIMITER.join(\r"},{"line_number":310,"context_line":"            (self.pool_name, self.fs_prefix, share[\u0027name\u0027]))\r"},{"line_number":311,"context_line":"        res \u003d self.nef.get(url)\r"},{"line_number":312,"context_line":"        security_contexts \u003d res.get(\u0027securityContexts\u0027, [])\r"},{"line_number":313,"context_line":"        for i in range(len(security_contexts)):\r"},{"line_number":314,"context_line":"            address_ \u003d security_contexts[i][\u0027root\u0027][0][\u0027entity\u0027]\r"},{"line_number":315,"context_line":"            mask_ \u003d security_contexts[i][\u0027root\u0027][0].get(\u0027mask\u0027)\r"},{"line_number":316,"context_line":"            if address \u003d\u003d address_ and mask \u003d\u003d mask_:\r"},{"line_number":317,"context_line":"                del security_contexts[i]\r"},{"line_number":318,"context_line":"                break\r"},{"line_number":319,"context_line":"        data \u003d {\"securityContexts\": security_contexts}\r"},{"line_number":320,"context_line":"        self.nef.put(url, data)\r"},{"line_number":321,"context_line":"\r"},{"line_number":322,"context_line":"    def _set_quota(self, share_name, new_size):\r"},{"line_number":323,"context_line":"        if self.configuration.nexenta_thin_provisioning:\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_32978a3b","line":320,"range":{"start_line":252,"start_character":2,"end_line":320,"end_character":31},"updated":"2016-05-10 16:16:11.000000000","message":"implement \"update_access\" instead of allow and deny","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        total_space \u003d utils.str2gib_size(total)\r"},{"line_number":339,"context_line":"        free_space \u003d utils.str2gib_size(free)\r"},{"line_number":340,"context_line":"\r"},{"line_number":341,"context_line":"        data \u003d dict(\r"},{"line_number":342,"context_line":"            vendor_name\u003d\u0027Nexenta\u0027,\r"},{"line_number":343,"context_line":"            storage_protocol\u003dself.storage_protocol,\r"},{"line_number":344,"context_line":"            total_capacity_gb\u003dtotal_space,\r"},{"line_number":345,"context_line":"            free_capacity_gb\u003dfree_space,\r"},{"line_number":346,"context_line":"            reserved_percentage\u003dself.configuration.reserved_share_percentage,\r"},{"line_number":347,"context_line":"            nfs_mount_point_base\u003dself.nfs_mount_point_base,\r"},{"line_number":348,"context_line":"            thin_provisioning\u003dself.configuration.nexenta_thin_provisioning,\r"},{"line_number":349,"context_line":"            driver_version\u003dVERSION\r"},{"line_number":350,"context_line":"        )\r"},{"line_number":351,"context_line":"        self._stats.update(data)\r"},{"line_number":352,"context_line":"\r"},{"line_number":353,"context_line":"    def _get_capacity_info(self, path):\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_92bf56a9","line":350,"range":{"start_line":341,"start_character":15,"end_line":350,"end_character":9},"updated":"2016-05-10 16:16:11.000000000","message":"use {} instead of dict()","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":130,"context_line":"\r"},{"line_number":131,"context_line":"        url \u003d \u0027storage/pools/{}/filesystems\u0027.format(self.pool_name)\r"},{"line_number":132,"context_line":"        self.nef.post(url, data)\r"},{"line_number":133,"context_line":"        location \u003d \u0027{}:/{}/{}/{}\u0027.format(self.nef_host, self.pool_name,\r"},{"line_number":134,"context_line":"                                         self.fs_prefix, share[\u0027name\u0027])\r"},{"line_number":135,"context_line":"\r"},{"line_number":136,"context_line":"        try:\r"},{"line_number":137,"context_line":"            self._add_permission(share[\u0027name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_42e772ac","line":134,"range":{"start_line":133,"start_character":8,"end_line":134,"end_character":71},"updated":"2016-05-12 14:00:07.000000000","message":"Same as in https://review.openstack.org/#/c/309286/6/manila/share/drivers/nexenta/nexenta_helper.py\n\n\"\"\"\nIt is deprecated way of export location reporting. It is expected to be dict since Mitaka timeframe. See example here: https://github.com/openstack/manila/blob/bf24cdba/manila/share/drivers/zfsonlinux/utils.py#L205\n\"\"\"\n\nSame below.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":130,"context_line":"\r"},{"line_number":131,"context_line":"        url \u003d \u0027storage/pools/{}/filesystems\u0027.format(self.pool_name)\r"},{"line_number":132,"context_line":"        self.nef.post(url, data)\r"},{"line_number":133,"context_line":"        location \u003d \u0027{}:/{}/{}/{}\u0027.format(self.nef_host, self.pool_name,\r"},{"line_number":134,"context_line":"                                         self.fs_prefix, share[\u0027name\u0027])\r"},{"line_number":135,"context_line":"\r"},{"line_number":136,"context_line":"        try:\r"},{"line_number":137,"context_line":"            self._add_permission(share[\u0027name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_de4ec894","line":134,"range":{"start_line":133,"start_character":8,"end_line":134,"end_character":71},"in_reply_to":"dab17558_42e772ac","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            try:\r"},{"line_number":140,"context_line":"                url \u003d \u0027storage/pools/{}/filesystems/{}\u0027.format(\r"},{"line_number":141,"context_line":"                    self.pool_name,\r"},{"line_number":142,"context_line":"                    PATH_DELIMITER.join([self.fs_prefix, share[\u0027name\u0027]]))\r"},{"line_number":143,"context_line":"                self.nef.delete(url)\r"},{"line_number":144,"context_line":"            except exception.NexentaException:\r"},{"line_number":145,"context_line":"                LOG.warning(_LW(\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_0581f44d","line":142,"updated":"2016-05-12 14:00:07.000000000","message":"s/list/tuple/","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            try:\r"},{"line_number":140,"context_line":"                url \u003d \u0027storage/pools/{}/filesystems/{}\u0027.format(\r"},{"line_number":141,"context_line":"                    self.pool_name,\r"},{"line_number":142,"context_line":"                    PATH_DELIMITER.join([self.fs_prefix, share[\u0027name\u0027]]))\r"},{"line_number":143,"context_line":"                self.nef.delete(url)\r"},{"line_number":144,"context_line":"            except exception.NexentaException:\r"},{"line_number":145,"context_line":"                LOG.warning(_LW(\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_9e7a80b8","line":142,"in_reply_to":"dab17558_0581f44d","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                self.nef.delete(url)\r"},{"line_number":144,"context_line":"            except exception.NexentaException:\r"},{"line_number":145,"context_line":"                LOG.warning(_LW(\r"},{"line_number":146,"context_line":"                    \"Cannot destroy created filesystem: %(vol)s/%(folder)s\"),\r"},{"line_number":147,"context_line":"                    {\u0027vol\u0027: self.pool_name, \u0027folder\u0027: \u0027/\u0027.join(\r"},{"line_number":148,"context_line":"                        [self.fs_prefix, share[\u0027name\u0027]])})\r"},{"line_number":149,"context_line":"            raise\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_22a34e51","line":146,"range":{"start_line":146,"start_character":21,"end_line":146,"end_character":54},"updated":"2016-05-12 14:00:07.000000000","message":"Why cannot? Better to log exception.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                self.nef.delete(url)\r"},{"line_number":144,"context_line":"            except exception.NexentaException:\r"},{"line_number":145,"context_line":"                LOG.warning(_LW(\r"},{"line_number":146,"context_line":"                    \"Cannot destroy created filesystem: %(vol)s/%(folder)s\"),\r"},{"line_number":147,"context_line":"                    {\u0027vol\u0027: self.pool_name, \u0027folder\u0027: \u0027/\u0027.join(\r"},{"line_number":148,"context_line":"                        [self.fs_prefix, share[\u0027name\u0027]])})\r"},{"line_number":149,"context_line":"            raise\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7e799cc7","line":146,"range":{"start_line":146,"start_character":21,"end_line":146,"end_character":54},"in_reply_to":"dab17558_22a34e51","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                LOG.warning(_LW(\r"},{"line_number":146,"context_line":"                    \"Cannot destroy created filesystem: %(vol)s/%(folder)s\"),\r"},{"line_number":147,"context_line":"                    {\u0027vol\u0027: self.pool_name, \u0027folder\u0027: \u0027/\u0027.join(\r"},{"line_number":148,"context_line":"                        [self.fs_prefix, share[\u0027name\u0027]])})\r"},{"line_number":149,"context_line":"            raise\r"},{"line_number":150,"context_line":"        return location\r"},{"line_number":151,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_25807846","line":148,"range":{"start_line":148,"start_character":24,"end_line":148,"end_character":55},"updated":"2016-05-12 14:00:07.000000000","message":"s/list/tuple/","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                LOG.warning(_LW(\r"},{"line_number":146,"context_line":"                    \"Cannot destroy created filesystem: %(vol)s/%(folder)s\"),\r"},{"line_number":147,"context_line":"                    {\u0027vol\u0027: self.pool_name, \u0027folder\u0027: \u0027/\u0027.join(\r"},{"line_number":148,"context_line":"                        [self.fs_prefix, share[\u0027name\u0027]])})\r"},{"line_number":149,"context_line":"            raise\r"},{"line_number":150,"context_line":"        return location\r"},{"line_number":151,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_de7d28e8","line":148,"range":{"start_line":148,"start_character":24,"end_line":148,"end_character":55},"in_reply_to":"dab17558_25807846","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0f6cf62860125c16d508bb2f341720f896ea3ec4","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                LOG.warning(_LW(\r"},{"line_number":146,"context_line":"                    \"Cannot destroy created filesystem: %(vol)s/%(folder)s\"),\r"},{"line_number":147,"context_line":"                    {\u0027vol\u0027: self.pool_name, \u0027folder\u0027: \u0027/\u0027.join(\r"},{"line_number":148,"context_line":"                        [self.fs_prefix, share[\u0027name\u0027]])})\r"},{"line_number":149,"context_line":"            raise\r"},{"line_number":150,"context_line":"        return location\r"},{"line_number":151,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_db07e9c7","line":148,"range":{"start_line":148,"start_character":24,"end_line":148,"end_character":55},"in_reply_to":"dab17558_de7d28e8","updated":"2016-05-23 16:38:00.000000000","message":"Where?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":157,"context_line":"               \u0027filesystems/%(fs)s/snapshots/%(snap)s/clone\u0027) % {\r"},{"line_number":158,"context_line":"            \u0027pool\u0027: self.pool_name,\r"},{"line_number":159,"context_line":"            \u0027fs\u0027: PATH_DELIMITER.join(\r"},{"line_number":160,"context_line":"                [self.fs_prefix, snapshot[\u0027share_name\u0027]]),\r"},{"line_number":161,"context_line":"            \u0027snap\u0027: snapshot[\u0027name\u0027]}\r"},{"line_number":162,"context_line":"        location \u003d \u0027{}:/{}/{}/{}\u0027.format(self.nef_host, self.pool_name,\r"},{"line_number":163,"context_line":"                                         self.fs_prefix, share[\u0027name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_659280a1","line":160,"range":{"start_line":160,"start_character":16,"end_line":160,"end_character":56},"updated":"2016-05-12 14:00:07.000000000","message":"s/list/tuple/","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":157,"context_line":"               \u0027filesystems/%(fs)s/snapshots/%(snap)s/clone\u0027) % {\r"},{"line_number":158,"context_line":"            \u0027pool\u0027: self.pool_name,\r"},{"line_number":159,"context_line":"            \u0027fs\u0027: PATH_DELIMITER.join(\r"},{"line_number":160,"context_line":"                [self.fs_prefix, snapshot[\u0027share_name\u0027]]),\r"},{"line_number":161,"context_line":"            \u0027snap\u0027: snapshot[\u0027name\u0027]}\r"},{"line_number":162,"context_line":"        location \u003d \u0027{}:/{}/{}/{}\u0027.format(self.nef_host, self.pool_name,\r"},{"line_number":163,"context_line":"                                         self.fs_prefix, share[\u0027name\u0027])\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7e287ce2","line":160,"range":{"start_line":160,"start_character":16,"end_line":160,"end_character":56},"in_reply_to":"dab17558_659280a1","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            \u0027snap\u0027: snapshot[\u0027name\u0027]}\r"},{"line_number":162,"context_line":"        location \u003d \u0027{}:/{}/{}/{}\u0027.format(self.nef_host, self.pool_name,\r"},{"line_number":163,"context_line":"                                         self.fs_prefix, share[\u0027name\u0027])\r"},{"line_number":164,"context_line":"        path \u003d \u0027/\u0027.join([self.pool_name, self.fs_prefix, share[\u0027name\u0027]])\r"},{"line_number":165,"context_line":"        data \u003d {\u0027targetPath\u0027: path}\r"},{"line_number":166,"context_line":"        self.nef.post(url, data)\r"},{"line_number":167,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_c58fec73","line":164,"range":{"start_line":164,"start_character":24,"end_line":164,"end_character":71},"updated":"2016-05-12 14:00:07.000000000","message":"s/list/tuple/","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            \u0027snap\u0027: snapshot[\u0027name\u0027]}\r"},{"line_number":162,"context_line":"        location \u003d \u0027{}:/{}/{}/{}\u0027.format(self.nef_host, self.pool_name,\r"},{"line_number":163,"context_line":"                                         self.fs_prefix, share[\u0027name\u0027])\r"},{"line_number":164,"context_line":"        path \u003d \u0027/\u0027.join([self.pool_name, self.fs_prefix, share[\u0027name\u0027]])\r"},{"line_number":165,"context_line":"        data \u003d {\u0027targetPath\u0027: path}\r"},{"line_number":166,"context_line":"        self.nef.post(url, data)\r"},{"line_number":167,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_3e0a7479","line":164,"range":{"start_line":164,"start_character":24,"end_line":164,"end_character":71},"in_reply_to":"dab17558_c58fec73","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        try:\r"},{"line_number":197,"context_line":"            self.nef.delete(url)\r"},{"line_number":198,"context_line":"        except exception.NexentaException as e:\r"},{"line_number":199,"context_line":"            if \u0027Failed to destroy snapshot\u0027 in e.msg:\r"},{"line_number":200,"context_line":"                LOG.debug(\u0027Snapshot has dependent clones, skipping\u0027)\r"},{"line_number":201,"context_line":"            else:\r"},{"line_number":202,"context_line":"                raise\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_a2a61e51","line":199,"range":{"start_line":199,"start_character":15,"end_line":199,"end_character":52},"updated":"2016-05-12 14:00:07.000000000","message":"Same comment as in https://review.openstack.org/#/c/309286/6/manila/share/drivers/nexenta/nexenta_helper.py\n\nDependency on exception message is very fragile approach. Please, use return codes for such stuff.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        try:\r"},{"line_number":197,"context_line":"            self.nef.delete(url)\r"},{"line_number":198,"context_line":"        except exception.NexentaException as e:\r"},{"line_number":199,"context_line":"            if \u0027Failed to destroy snapshot\u0027 in e.msg:\r"},{"line_number":200,"context_line":"                LOG.debug(\u0027Snapshot has dependent clones, skipping\u0027)\r"},{"line_number":201,"context_line":"            else:\r"},{"line_number":202,"context_line":"                raise\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_be4784ba","line":199,"range":{"start_line":199,"start_character":15,"end_line":199,"end_character":52},"in_reply_to":"dab17558_a2a61e51","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        url \u003d \u0027storage/pools/%(pool)s/filesystems/%(fs)s/snapshots\u0027 % {\r"},{"line_number":221,"context_line":"            \u0027pool\u0027: self.pool_name,\r"},{"line_number":222,"context_line":"            \u0027fs\u0027: PATH_DELIMITER.join(\r"},{"line_number":223,"context_line":"                [self.fs_prefix, snapshot[\u0027share_name\u0027]]),\r"},{"line_number":224,"context_line":"        }\r"},{"line_number":225,"context_line":"        data \u003d {\u0027name\u0027: snapshot[\u0027name\u0027]}\r"},{"line_number":226,"context_line":"        self.nef.post(url, data)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_e5ecb02b","line":223,"range":{"start_line":223,"start_character":16,"end_line":223,"end_character":56},"updated":"2016-05-12 14:00:07.000000000","message":"s/list/tuple/","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        url \u003d \u0027storage/pools/%(pool)s/filesystems/%(fs)s/snapshots\u0027 % {\r"},{"line_number":221,"context_line":"            \u0027pool\u0027: self.pool_name,\r"},{"line_number":222,"context_line":"            \u0027fs\u0027: PATH_DELIMITER.join(\r"},{"line_number":223,"context_line":"                [self.fs_prefix, snapshot[\u0027share_name\u0027]]),\r"},{"line_number":224,"context_line":"        }\r"},{"line_number":225,"context_line":"        data \u003d {\u0027name\u0027: snapshot[\u0027name\u0027]}\r"},{"line_number":226,"context_line":"        self.nef.post(url, data)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_5e3c982e","line":223,"range":{"start_line":223,"start_character":16,"end_line":223,"end_character":56},"in_reply_to":"dab17558_e5ecb02b","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":229,"context_line":"        \"\"\"Delete a snapshot.\"\"\"\r"},{"line_number":230,"context_line":"        LOG.debug(\u0027Deleting a snapshot: %s.\u0027 % \u0027@\u0027.join(\r"},{"line_number":231,"context_line":"            [snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]]))\r"},{"line_number":232,"context_line":"\r"},{"line_number":233,"context_line":"        url \u003d (\u0027storage/pools/%(pool)s/filesystems/%(fs)s/snapshots/\u0027\r"},{"line_number":234,"context_line":"               \u0027%(snap)s\u0027) % {\u0027pool\u0027: self.pool_name,\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_45f2dc07","line":231,"range":{"start_line":231,"start_character":11,"end_line":231,"end_character":54},"updated":"2016-05-12 14:00:07.000000000","message":"s/list/tuple/","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":229,"context_line":"        \"\"\"Delete a snapshot.\"\"\"\r"},{"line_number":230,"context_line":"        LOG.debug(\u0027Deleting a snapshot: %s.\u0027 % \u0027@\u0027.join(\r"},{"line_number":231,"context_line":"            [snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027]]))\r"},{"line_number":232,"context_line":"\r"},{"line_number":233,"context_line":"        url \u003d (\u0027storage/pools/%(pool)s/filesystems/%(fs)s/snapshots/\u0027\r"},{"line_number":234,"context_line":"               \u0027%(snap)s\u0027) % {\u0027pool\u0027: self.pool_name,\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7e419ca8","line":231,"range":{"start_line":231,"start_character":11,"end_line":231,"end_character":54},"in_reply_to":"dab17558_45f2dc07","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        url \u003d (\u0027storage/pools/%(pool)s/filesystems/%(fs)s/snapshots/\u0027\r"},{"line_number":234,"context_line":"               \u0027%(snap)s\u0027) % {\u0027pool\u0027: self.pool_name,\r"},{"line_number":235,"context_line":"                              \u0027fs\u0027: PATH_DELIMITER.join(\r"},{"line_number":236,"context_line":"                                  [self.fs_prefix,\r"},{"line_number":237,"context_line":"                                   snapshot[\u0027share_name\u0027]]),\r"},{"line_number":238,"context_line":"                              \u0027snap\u0027: snapshot[\u0027name\u0027]}\r"},{"line_number":239,"context_line":"        try:\r"},{"line_number":240,"context_line":"            self.nef.delete(url)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_85dcc475","line":237,"range":{"start_line":236,"start_character":34,"end_line":237,"end_character":58},"updated":"2016-05-12 14:00:07.000000000","message":"s/list/tuple/","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        url \u003d (\u0027storage/pools/%(pool)s/filesystems/%(fs)s/snapshots/\u0027\r"},{"line_number":234,"context_line":"               \u0027%(snap)s\u0027) % {\u0027pool\u0027: self.pool_name,\r"},{"line_number":235,"context_line":"                              \u0027fs\u0027: PATH_DELIMITER.join(\r"},{"line_number":236,"context_line":"                                  [self.fs_prefix,\r"},{"line_number":237,"context_line":"                                   snapshot[\u0027share_name\u0027]]),\r"},{"line_number":238,"context_line":"                              \u0027snap\u0027: snapshot[\u0027name\u0027]}\r"},{"line_number":239,"context_line":"        try:\r"},{"line_number":240,"context_line":"            self.nef.delete(url)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_3e339463","line":237,"range":{"start_line":236,"start_character":34,"end_line":237,"end_character":58},"in_reply_to":"dab17558_85dcc475","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":332,"context_line":"\r"},{"line_number":333,"context_line":"    def _update_share_stats(self, data\u003dNone):\r"},{"line_number":334,"context_line":"        super(NexentaNasDriver, self)._update_share_stats()\r"},{"line_number":335,"context_line":"        share \u003d \u0027:/\u0027.join([self.nef_host, self.fs_prefix])\r"},{"line_number":336,"context_line":"        total, free, allocated \u003d self._get_capacity_info(share)\r"},{"line_number":337,"context_line":"        total_space \u003d utils.str2gib_size(total)\r"},{"line_number":338,"context_line":"        free_space \u003d utils.str2gib_size(free)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_45081c29","line":335,"range":{"start_line":335,"start_character":26,"end_line":335,"end_character":57},"updated":"2016-05-12 14:00:07.000000000","message":"Use \"tuple\" is you need only data container that is not going to be changed and will be only iterated. It is 10 times faster initialized then \"list\". You already do so in other \"join\" usages.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":332,"context_line":"\r"},{"line_number":333,"context_line":"    def _update_share_stats(self, data\u003dNone):\r"},{"line_number":334,"context_line":"        super(NexentaNasDriver, self)._update_share_stats()\r"},{"line_number":335,"context_line":"        share \u003d \u0027:/\u0027.join([self.nef_host, self.fs_prefix])\r"},{"line_number":336,"context_line":"        total, free, allocated \u003d self._get_capacity_info(share)\r"},{"line_number":337,"context_line":"        total_space \u003d utils.str2gib_size(total)\r"},{"line_number":338,"context_line":"        free_space \u003d utils.str2gib_size(free)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_5ef5b880","line":335,"range":{"start_line":335,"start_character":26,"end_line":335,"end_character":57},"in_reply_to":"dab17558_45081c29","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            raise exception.InvalidInput(err_msg)\r"},{"line_number":374,"context_line":"\r"},{"line_number":375,"context_line":"        access_to \u003d access[\u0027access_to\u0027].strip()\r"},{"line_number":376,"context_line":"        ls \u003d [{\"allow\": True,\r"},{"line_number":377,"context_line":"               \"etype\": \"network\",\r"},{"line_number":378,"context_line":"               \"entity\": access_to}]\r"},{"line_number":379,"context_line":"        data \u003d {\r"},{"line_number":380,"context_line":"            \"securityContexts\": [\r"},{"line_number":381,"context_line":"                {\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_c51c0c6d","line":378,"range":{"start_line":376,"start_character":8,"end_line":378,"end_character":36},"updated":"2016-05-12 14:00:07.000000000","message":"It fits one line.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            raise exception.InvalidInput(err_msg)\r"},{"line_number":374,"context_line":"\r"},{"line_number":375,"context_line":"        access_to \u003d access[\u0027access_to\u0027].strip()\r"},{"line_number":376,"context_line":"        ls \u003d [{\"allow\": True,\r"},{"line_number":377,"context_line":"               \"etype\": \"network\",\r"},{"line_number":378,"context_line":"               \"entity\": access_to}]\r"},{"line_number":379,"context_line":"        data \u003d {\r"},{"line_number":380,"context_line":"            \"securityContexts\": [\r"},{"line_number":381,"context_line":"                {\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_de088893","line":378,"range":{"start_line":376,"start_character":8,"end_line":378,"end_character":36},"in_reply_to":"dab17558_c51c0c6d","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"628b9c55b258048913e7dac05bd1e982fc45f663","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                    \"Cannot destroy created filesystem: %(vol)s/%(folder)s, \"\r"},{"line_number":149,"context_line":"                    \"exception: %(exc)s\"),\r"},{"line_number":150,"context_line":"                    {\u0027vol\u0027: self.pool_name, \u0027folder\u0027: \u0027/\u0027.join(\r"},{"line_number":151,"context_line":"                        [self.fs_prefix, share[\u0027name\u0027]]), \u0027exc\u0027: exc})\r"},{"line_number":152,"context_line":"            raise\r"},{"line_number":153,"context_line":"        return location\r"},{"line_number":154,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_7bfd1db0","line":151,"range":{"start_line":151,"start_character":24,"end_line":151,"end_character":55},"updated":"2016-05-23 16:37:42.000000000","message":"Left-over from PS6:\n\n\"\"\"\ns/list/tuple/\n\"\"\"","commit_id":"ab2180bbc5b04aeba555c5bfd1e35755171dc98d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"628b9c55b258048913e7dac05bd1e982fc45f663","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        super(NexentaNasDriver, self)._update_share_stats()\r"},{"line_number":339,"context_line":"        share \u003d \u0027:/\u0027.join((self.nef_host, self.fs_prefix))\r"},{"line_number":340,"context_line":"        total, free, allocated \u003d self._get_capacity_info(share)\r"},{"line_number":341,"context_line":"        # total_space \u003d utils.str2gib_size(total)\r"},{"line_number":342,"context_line":"        # free_space \u003d utils.str2gib_size(free)\r"},{"line_number":343,"context_line":"\r"},{"line_number":344,"context_line":"        data \u003d {\r"},{"line_number":345,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_1bb3310b","line":342,"range":{"start_line":341,"start_character":8,"end_line":342,"end_character":47},"updated":"2016-05-23 16:37:42.000000000","message":"?","commit_id":"ab2180bbc5b04aeba555c5bfd1e35755171dc98d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"\"\"Do initialization.\"\"\"\r"},{"line_number":43,"context_line":"        LOG.debug(\u0027Initializing Nexenta driver.\u0027)\r"},{"line_number":44,"context_line":"        super(NexentaNasDriver, self).__init__(False, *args, **kwargs)\r"},{"line_number":45,"context_line":"        self.configuration \u003d kwargs.get(\u0027configuration\u0027, None)\r"},{"line_number":46,"context_line":"        if self.configuration:\r"},{"line_number":47,"context_line":"            self.configuration.append_config_values(\r"},{"line_number":48,"context_line":"                options.nexenta_connection_opts)\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_bb1101af","line":45,"range":{"start_line":45,"start_character":55,"end_line":45,"end_character":61},"updated":"2016-07-04 14:49:23.000000000","message":"None is default by default.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                options.nexenta_dataset_opts)\r"},{"line_number":53,"context_line":"        else:\r"},{"line_number":54,"context_line":"            raise exception.BadConfigurationException(\r"},{"line_number":55,"context_line":"                _(\u0027Nexenta configuration missing.\u0027))\r"},{"line_number":56,"context_line":"\r"},{"line_number":57,"context_line":"        self.nef \u003d None\r"},{"line_number":58,"context_line":"        self.nef_protocol \u003d self.configuration.nexenta_rest_protocol\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_bf0164b1","line":55,"updated":"2016-07-06 21:38:26.000000000","message":"reason\u003d","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":71,"context_line":"\r"},{"line_number":72,"context_line":"    @property\r"},{"line_number":73,"context_line":"    def backend_name(self):\r"},{"line_number":74,"context_line":"        backend_name \u003d None\r"},{"line_number":75,"context_line":"        if self.configuration:\r"},{"line_number":76,"context_line":"            backend_name \u003d self.configuration.safe_get(\u0027share_backend_name\u0027)\r"},{"line_number":77,"context_line":"        if not backend_name:\r"},{"line_number":78,"context_line":"            backend_name \u003d \u0027NexentaStor5\u0027\r"},{"line_number":79,"context_line":"        return backend_name\r"},{"line_number":80,"context_line":"\r"},{"line_number":81,"context_line":"    def do_setup(self, context):\r"},{"line_number":82,"context_line":"        \"\"\"Any initialization the nexenta nas driver does while starting.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_bb88e1e8","line":79,"range":{"start_line":74,"start_character":8,"end_line":79,"end_character":27},"updated":"2016-07-04 14:49:23.000000000","message":"Please, reuse approach you use for \"ns4\" driver. For the moment you do redundant operations here.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        data \u003d {\u0027targetPath\u0027: path}\r"},{"line_number":168,"context_line":"        self.nef.post(url, data)\r"},{"line_number":169,"context_line":"\r"},{"line_number":170,"context_line":"        try:\r"},{"line_number":171,"context_line":"            self._add_permission(share[\u0027name\u0027])\r"},{"line_number":172,"context_line":"        except exception.NexentaException:\r"},{"line_number":173,"context_line":"            try:\r"},{"line_number":174,"context_line":"                self.delete_share(None, share)\r"},{"line_number":175,"context_line":"            except exception.NexentaException:\r"},{"line_number":176,"context_line":"                LOG.warning(_LW(\"Cannot destroy cloned filesystem: \"\r"},{"line_number":177,"context_line":"                                \"%(vol)s/%(filesystem)s\"),\r"},{"line_number":178,"context_line":"                            {\u0027vol\u0027: self.pool_name,\r"},{"line_number":179,"context_line":"                             \u0027filesystem\u0027: \u0027/\u0027.join(\r"},{"line_number":180,"context_line":"                                 (self.fs_prefix, share[\u0027name\u0027]))})\r"},{"line_number":181,"context_line":"            raise\r"},{"line_number":182,"context_line":"\r"},{"line_number":183,"context_line":"        return location\r"},{"line_number":184,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_bb40e157","line":181,"range":{"start_line":170,"start_character":8,"end_line":181,"end_character":17},"updated":"2016-07-04 14:49:23.000000000","message":"If you get error deleting share than you lose first exception information and do not log it. So, need to rewrite it to keep all exception info.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        data \u003d {\u0027targetPath\u0027: path}\r"},{"line_number":168,"context_line":"        self.nef.post(url, data)\r"},{"line_number":169,"context_line":"\r"},{"line_number":170,"context_line":"        try:\r"},{"line_number":171,"context_line":"            self._add_permission(share[\u0027name\u0027])\r"},{"line_number":172,"context_line":"        except exception.NexentaException:\r"},{"line_number":173,"context_line":"            try:\r"},{"line_number":174,"context_line":"                self.delete_share(None, share)\r"},{"line_number":175,"context_line":"            except exception.NexentaException:\r"},{"line_number":176,"context_line":"                LOG.warning(_LW(\"Cannot destroy cloned filesystem: \"\r"},{"line_number":177,"context_line":"                                \"%(vol)s/%(filesystem)s\"),\r"},{"line_number":178,"context_line":"                            {\u0027vol\u0027: self.pool_name,\r"},{"line_number":179,"context_line":"                             \u0027filesystem\u0027: \u0027/\u0027.join(\r"},{"line_number":180,"context_line":"                                 (self.fs_prefix, share[\u0027name\u0027]))})\r"},{"line_number":181,"context_line":"            raise\r"},{"line_number":182,"context_line":"\r"},{"line_number":183,"context_line":"        return location\r"},{"line_number":184,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_fef024ff","line":181,"range":{"start_line":170,"start_character":8,"end_line":181,"end_character":17},"in_reply_to":"1aa78d24_bb40e157","updated":"2016-07-06 15:22:57.000000000","message":"Done","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            self.nef.delete(url)\r"},{"line_number":196,"context_line":"        except exception.NexentaException as e:\r"},{"line_number":197,"context_line":"            if \u0027EEXIST\u0027 \u003d\u003d e.kwargs[\u0027code\u0027]:\r"},{"line_number":198,"context_line":"                LOG.debug(\u0027Snapshot has dependent clones, skipping\u0027)\r"},{"line_number":199,"context_line":"            else:\r"},{"line_number":200,"context_line":"                raise\r"},{"line_number":201,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_1b2655ce","line":198,"range":{"start_line":198,"start_character":16,"end_line":198,"end_character":68},"updated":"2016-07-04 14:49:23.000000000","message":"Which snapshot?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":203,"context_line":"        \"\"\"Extends a share.\"\"\"\r"},{"line_number":204,"context_line":"        LOG.debug(\r"},{"line_number":205,"context_line":"            \u0027Extending share: %s to %sG.\u0027 % (share[\u0027name\u0027], new_size))\r"},{"line_number":206,"context_line":"        self._set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":207,"context_line":"\r"},{"line_number":208,"context_line":"    def shrink_share(self, share, new_size, share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_b6a47857","line":205,"range":{"start_line":205,"start_character":45,"end_line":205,"end_character":58},"updated":"2016-07-04 14:49:23.000000000","message":"Share name? Why not share ID?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":203,"context_line":"        \"\"\"Extends a share.\"\"\"\r"},{"line_number":204,"context_line":"        LOG.debug(\r"},{"line_number":205,"context_line":"            \u0027Extending share: %s to %sG.\u0027 % (share[\u0027name\u0027], new_size))\r"},{"line_number":206,"context_line":"        self._set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":207,"context_line":"\r"},{"line_number":208,"context_line":"    def shrink_share(self, share, new_size, share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_fe8024c1","line":205,"range":{"start_line":205,"start_character":45,"end_line":205,"end_character":58},"in_reply_to":"1aa78d24_b6a47857","updated":"2016-07-06 15:22:57.000000000","message":"Should we use share[\u0027id\u0027] instead of name everywhere?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            if e.kwargs[\u0027code\u0027] \u003d\u003d \u0027ENOENT\u0027:\r"},{"line_number":240,"context_line":"                LOG.warning(e.msg + e.kwargs[\u0027code\u0027])\r"},{"line_number":241,"context_line":"            else:\r"},{"line_number":242,"context_line":"                raise e\r"},{"line_number":243,"context_line":"\r"},{"line_number":244,"context_line":"    def update_access(self, context, share, access_rules, add_rules,\r"},{"line_number":245,"context_line":"                      delete_rules, share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_3fdbb450","line":242,"updated":"2016-07-06 21:38:26.000000000","message":"Remove \"e\".","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                except Exception:\r"},{"line_number":285,"context_line":"                    raise exception.InvalidInput(\r"},{"line_number":286,"context_line":"                        \u0027\u003c{}\u003e is not a valid access parameter\u0027.format(\r"},{"line_number":287,"context_line":"                            addr))\r"},{"line_number":288,"context_line":"            new_sc \u003d {\r"},{"line_number":289,"context_line":"                \"securityModes\": [\"sys\"]\r"},{"line_number":290,"context_line":"            }\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_bfefa4e7","line":287,"updated":"2016-07-06 21:38:26.000000000","message":"reason\u003d_(…)","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                except Exception:\r"},{"line_number":304,"context_line":"                    raise exception.InvalidInput(\r"},{"line_number":305,"context_line":"                        \u0027\u003c{}\u003e is not a valid access parameter\u0027.format(\r"},{"line_number":306,"context_line":"                            addr))\r"},{"line_number":307,"context_line":"            new_sc \u003d {\r"},{"line_number":308,"context_line":"                \"securityModes\": [\"sys\"]\r"},{"line_number":309,"context_line":"            }\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_ffbbece2","line":306,"updated":"2016-07-06 21:38:26.000000000","message":"same","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":342,"context_line":"            \u0027nfs_mount_point_base\u0027: self.nfs_mount_point_base,\r"},{"line_number":343,"context_line":"            \u0027thin_provisioning\u0027: self.configuration.nexenta_thin_provisioning,\r"},{"line_number":344,"context_line":"            \u0027driver_version\u0027: VERSION,\r"},{"line_number":345,"context_line":"            \u0027share_backend_name\u0027: self.backend_name\r"},{"line_number":346,"context_line":"        }\r"},{"line_number":347,"context_line":"        self._stats.update(data)\r"},{"line_number":348,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_ffa2ccac","line":345,"updated":"2016-07-06 21:38:26.000000000","message":"Need to report provisioned_capacity_gb and max_over_subscription_ratio","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        try:\r"},{"line_number":173,"context_line":"            self._add_permission(share[\u0027name\u0027])\r"},{"line_number":174,"context_line":"        except exception.NexentaException as exc:\r"},{"line_number":175,"context_line":"            LOG.error(exc)\r"},{"line_number":176,"context_line":"            try:\r"},{"line_number":177,"context_line":"                self.delete_share(None, share)\r"},{"line_number":178,"context_line":"            except exception.NexentaException:\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_6e65781c","line":175,"updated":"2016-07-13 05:39:20.000000000","message":"Better to use LOG.exception which will log the trace stack so no need to add exc.  Instead you can add a message to indicate what operation failed and log the share name as well.","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":187,"context_line":"\r"},{"line_number":188,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):\r"},{"line_number":189,"context_line":"        \"\"\"Delete a share.\"\"\"\r"},{"line_number":190,"context_line":"        LOG.debug(\u0027Deleting share: %s.\u0027 % share[\u0027name\u0027])\r"},{"line_number":191,"context_line":"\r"},{"line_number":192,"context_line":"        url \u003d (\u0027storage/pools/%(pool)s/filesystems/%(fs)s\u0027) % {\r"},{"line_number":193,"context_line":"            \u0027pool\u0027: self.pool_name,\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_0e7b14bf","line":190,"updated":"2016-07-13 05:39:20.000000000","message":",","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":198,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":199,"context_line":"        \"\"\"Extends a share.\"\"\"\r"},{"line_number":200,"context_line":"        LOG.debug(\r"},{"line_number":201,"context_line":"            \u0027Extending share: %s to %sG.\u0027 % (share[\u0027name\u0027], new_size))\r"},{"line_number":202,"context_line":"        self._set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":203,"context_line":"\r"},{"line_number":204,"context_line":"    def shrink_share(self, share, new_size, share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_4e4fdc91","line":201,"updated":"2016-07-13 05:39:20.000000000","message":"Keyword parameters.","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    def shrink_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":205,"context_line":"        \"\"\"Shrinks size of existing share.\"\"\"\r"},{"line_number":206,"context_line":"        LOG.debug(\r"},{"line_number":207,"context_line":"            \u0027Shrinking share: %s to %sG.\u0027 % (share[\u0027name\u0027], new_size))\r"},{"line_number":208,"context_line":"        self._set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":209,"context_line":"\r"},{"line_number":210,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_ee604803","line":207,"updated":"2016-07-13 05:39:20.000000000","message":"Keyword parameters","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":221,"context_line":"\r"},{"line_number":222,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":223,"context_line":"        \"\"\"Delete a snapshot.\"\"\"\r"},{"line_number":224,"context_line":"        LOG.debug(\u0027Deleting a snapshot: %s.\u0027 % \u0027@\u0027.join(\r"},{"line_number":225,"context_line":"            (snapshot[\u0027share_name\u0027], snapshot[\u0027name\u0027])))\r"},{"line_number":226,"context_line":"\r"},{"line_number":227,"context_line":"        url \u003d (\u0027storage/pools/%(pool)s/filesystems/%(fs)s/snapshots/\u0027\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_8e3c24e2","line":224,"updated":"2016-07-13 05:39:20.000000000","message":"%-\u003e,\n\nUse keyword parameters.","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            self.nef.delete(url)\r"},{"line_number":234,"context_line":"        except exception.NexentaException as e:\r"},{"line_number":235,"context_line":"            if e.kwargs[\u0027code\u0027] \u003d\u003d \u0027ENOENT\u0027:\r"},{"line_number":236,"context_line":"                LOG.warning(e.msg + e.kwargs[\u0027code\u0027])\r"},{"line_number":237,"context_line":"            else:\r"},{"line_number":238,"context_line":"                raise\r"},{"line_number":239,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_8e138464","line":236,"updated":"2016-07-13 05:39:20.000000000","message":"Need to wrap the message with _LW","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        :param share_server: Data structure with share server information.\r"},{"line_number":255,"context_line":"        Not used by this driver.\r"},{"line_number":256,"context_line":"        \"\"\"\r"},{"line_number":257,"context_line":"        LOG.debug(\u0027Updating access to share %s.\u0027 % share)\r"},{"line_number":258,"context_line":"        rw_list \u003d []\r"},{"line_number":259,"context_line":"        ro_list \u003d []\r"},{"line_number":260,"context_line":"        security_contexts \u003d []\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_2e053013","line":257,"updated":"2016-07-13 05:39:20.000000000","message":",","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                        ls[0][\u0027mask\u0027] \u003d mask\r"},{"line_number":280,"context_line":"                except Exception:\r"},{"line_number":281,"context_line":"                    raise exception.InvalidInput(\r"},{"line_number":282,"context_line":"                        reason\u003d\u0027\u003c{}\u003e is not a valid access parameter\u0027.format(\r"},{"line_number":283,"context_line":"                            addr))\r"},{"line_number":284,"context_line":"            new_sc \u003d {\r"},{"line_number":285,"context_line":"                \"securityModes\": [\"sys\"]\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_f115c93f","line":282,"updated":"2016-07-13 05:39:20.000000000","message":"Need _ to wrap the message.","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":298,"context_line":"                        ls[0][\u0027mask\u0027] \u003d mask\r"},{"line_number":299,"context_line":"                except Exception:\r"},{"line_number":300,"context_line":"                    raise exception.InvalidInput(\r"},{"line_number":301,"context_line":"                        reason\u003d\u0027\u003c{}\u003e is not a valid access parameter\u0027.format(\r"},{"line_number":302,"context_line":"                            addr))\r"},{"line_number":303,"context_line":"            new_sc \u003d {\r"},{"line_number":304,"context_line":"                \"securityModes\": [\"sys\"]\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_311c7169","line":301,"updated":"2016-07-13 05:39:20.000000000","message":"Need _","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":326,"context_line":"    def _update_share_stats(self, data\u003dNone):\r"},{"line_number":327,"context_line":"        super(NexentaNasDriver, self)._update_share_stats()\r"},{"line_number":328,"context_line":"        share \u003d \u0027:/\u0027.join((self.nef_host, self.fs_prefix))\r"},{"line_number":329,"context_line":"        total, free, provisioned \u003d self._get_capacity_info(share)\r"},{"line_number":330,"context_line":"\r"},{"line_number":331,"context_line":"        data \u003d {\r"},{"line_number":332,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_3133d1f7","line":329,"updated":"2016-07-13 05:39:20.000000000","message":"Same comment as earlier.","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"719631c0a16ffafa49ac86e6b00597d6635c415d","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        :param share: Share that will have its access rules updated.\r"},{"line_number":275,"context_line":"        :param access_rules: All access rules for given share. This list\r"},{"line_number":276,"context_line":"        is enough to update the access rules for given share.\r"},{"line_number":277,"context_line":"        :param add_rules: Empty List or List of access rules which should be\r"},{"line_number":278,"context_line":"        added. access_rules already contains these rules. Not used by this\r"},{"line_number":279,"context_line":"        driver.\r"},{"line_number":280,"context_line":"        :param delete_rules: Empty List or List of access rules which should be\r"},{"line_number":281,"context_line":"        removed. access_rules doesn\u0027t contain these rules. Not used by\r"},{"line_number":282,"context_line":"        this driver.\r"},{"line_number":283,"context_line":"        :param share_server: Data structure with share server information.\r"},{"line_number":284,"context_line":"        Not used by this driver.\r"},{"line_number":285,"context_line":"        \"\"\"\r"}],"source_content_type":"text/x-python","patch_set":31,"id":"bacf61ea_020c093a","line":282,"range":{"start_line":277,"start_character":7,"end_line":282,"end_character":20},"updated":"2016-08-03 20:35:52.000000000","message":"So, you don\u0027t allow \u0027deny\u0027ing (or evicting or deleting) access?\n\nI would like to know if this is a limitation with your architecture or your backend, or if this is something you aren\u0027t providing now, but will be providing later.. \n\nThis should go ideally into our devref or the configuration reference.","commit_id":"9f71d860aa6d9c88badc8fe6e91854d08db37493"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            \u0027pool\u0027: self.pool_name, \u0027fs\u0027: self.fs_prefix}\r"},{"line_number":127,"context_line":"        fs_list \u003d self.nef.get(url)[\u0027data\u0027]\r"},{"line_number":128,"context_line":"        for fs in fs_list:\r"},{"line_number":129,"context_line":"            if fs[\u0027path\u0027] !\u003d \u0027%(pool)s/%(fs)s\u0027 % {\r"},{"line_number":130,"context_line":"                    \u0027pool\u0027: self.pool_name, \u0027fs\u0027: self.fs_prefix}:\r"},{"line_number":131,"context_line":"                self.provisioned_capacity +\u003d fs[\u0027quotaSize\u0027] / units.Gi\r"},{"line_number":132,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_064a98c5","line":129,"range":{"start_line":129,"start_character":29,"end_line":129,"end_character":46},"updated":"2016-08-08 21:02:39.000000000","message":"This substitution is done twice in this method.  Why not do it once?","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"a552115401cdb43222fdf873a3e418d6d6dc47f7","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            \u0027pool\u0027: self.pool_name, \u0027fs\u0027: self.fs_prefix}\r"},{"line_number":127,"context_line":"        fs_list \u003d self.nef.get(url)[\u0027data\u0027]\r"},{"line_number":128,"context_line":"        for fs in fs_list:\r"},{"line_number":129,"context_line":"            if fs[\u0027path\u0027] !\u003d \u0027%(pool)s/%(fs)s\u0027 % {\r"},{"line_number":130,"context_line":"                    \u0027pool\u0027: self.pool_name, \u0027fs\u0027: self.fs_prefix}:\r"},{"line_number":131,"context_line":"                self.provisioned_capacity +\u003d fs[\u0027quotaSize\u0027] / units.Gi\r"},{"line_number":132,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_d55cb7f2","line":129,"range":{"start_line":129,"start_character":29,"end_line":129,"end_character":46},"in_reply_to":"9ad45d7e_064a98c5","updated":"2016-08-19 09:03:48.000000000","message":"Done","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":132,"context_line":"\r"},{"line_number":133,"context_line":"    def create_share(self, context, share, share_server\u003dNone):\r"},{"line_number":134,"context_line":"        \"\"\"Create a share.\"\"\"\r"},{"line_number":135,"context_line":"        LOG.debug(\u0027Creating share: %s.\u0027 % share[\u0027name\u0027])\r"},{"line_number":136,"context_line":"        data \u003d {\r"},{"line_number":137,"context_line":"            \u0027recordSize\u0027: 4 * units.Ki,\r"},{"line_number":138,"context_line":"            \u0027compressionMode\u0027: self.dataset_compression,\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_895859fc","line":135,"range":{"start_line":135,"start_character":40,"end_line":135,"end_character":41},"updated":"2016-08-08 21:02:39.000000000","message":"Comma.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"a552115401cdb43222fdf873a3e418d6d6dc47f7","unresolved":false,"context_lines":[{"line_number":132,"context_line":"\r"},{"line_number":133,"context_line":"    def create_share(self, context, share, share_server\u003dNone):\r"},{"line_number":134,"context_line":"        \"\"\"Create a share.\"\"\"\r"},{"line_number":135,"context_line":"        LOG.debug(\u0027Creating share: %s.\u0027 % share[\u0027name\u0027])\r"},{"line_number":136,"context_line":"        data \u003d {\r"},{"line_number":137,"context_line":"            \u0027recordSize\u0027: 4 * units.Ki,\r"},{"line_number":138,"context_line":"            \u0027compressionMode\u0027: self.dataset_compression,\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_95acff8d","line":135,"range":{"start_line":135,"start_character":40,"end_line":135,"end_character":41},"in_reply_to":"9ad45d7e_895859fc","updated":"2016-08-19 09:03:48.000000000","message":"Done","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            \u0027recordSize\u0027: 4 * units.Ki,\r"},{"line_number":138,"context_line":"            \u0027compressionMode\u0027: self.dataset_compression,\r"},{"line_number":139,"context_line":"            \u0027name\u0027: \u0027/\u0027.join((self.fs_prefix, share[\u0027name\u0027])),\r"},{"line_number":140,"context_line":"            \u0027quotaSize\u0027: share[\u0027size\u0027] * units.Gi\r"},{"line_number":141,"context_line":"        }\r"},{"line_number":142,"context_line":"        if not self.configuration.nexenta_thin_provisioning:\r"},{"line_number":143,"context_line":"            data[\u0027reservationSize\u0027] \u003d share[\u0027size\u0027] * units.Gi\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_267ebce4","line":140,"range":{"start_line":140,"start_character":12,"end_line":140,"end_character":49},"updated":"2016-08-08 21:02:39.000000000","message":"Don\u0027t forget the trailing comma.  Same everywhere else.\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"a552115401cdb43222fdf873a3e418d6d6dc47f7","unresolved":false,"context_lines":[{"line_number":137,"context_line":"            \u0027recordSize\u0027: 4 * units.Ki,\r"},{"line_number":138,"context_line":"            \u0027compressionMode\u0027: self.dataset_compression,\r"},{"line_number":139,"context_line":"            \u0027name\u0027: \u0027/\u0027.join((self.fs_prefix, share[\u0027name\u0027])),\r"},{"line_number":140,"context_line":"            \u0027quotaSize\u0027: share[\u0027size\u0027] * units.Gi\r"},{"line_number":141,"context_line":"        }\r"},{"line_number":142,"context_line":"        if not self.configuration.nexenta_thin_provisioning:\r"},{"line_number":143,"context_line":"            data[\u0027reservationSize\u0027] \u003d share[\u0027size\u0027] * units.Gi\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_359f1352","line":140,"range":{"start_line":140,"start_character":12,"end_line":140,"end_character":49},"in_reply_to":"9ad45d7e_267ebce4","updated":"2016-08-19 09:03:48.000000000","message":"Done","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            \u0027targetPath\u0027: path,\r"},{"line_number":184,"context_line":"            \u0027quotaSize\u0027: share[\u0027size\u0027] * units.Gi,\r"},{"line_number":185,"context_line":"            \u0027recordSize\u0027: 4 * units.Ki,\r"},{"line_number":186,"context_line":"            \u0027compressionMode\u0027: self.dataset_compression}\r"},{"line_number":187,"context_line":"        if not self.configuration.nexenta_thin_provisioning:\r"},{"line_number":188,"context_line":"            data[\u0027reservationSize\u0027] \u003d share[\u0027size\u0027] * units.Gi\r"},{"line_number":189,"context_line":"        self.nef.post(url, data)\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_869fa802","line":186,"range":{"start_line":186,"start_character":55,"end_line":186,"end_character":56},"updated":"2016-08-08 21:02:39.000000000","message":"Wrap.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"a552115401cdb43222fdf873a3e418d6d6dc47f7","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            \u0027targetPath\u0027: path,\r"},{"line_number":184,"context_line":"            \u0027quotaSize\u0027: share[\u0027size\u0027] * units.Gi,\r"},{"line_number":185,"context_line":"            \u0027recordSize\u0027: 4 * units.Ki,\r"},{"line_number":186,"context_line":"            \u0027compressionMode\u0027: self.dataset_compression}\r"},{"line_number":187,"context_line":"        if not self.configuration.nexenta_thin_provisioning:\r"},{"line_number":188,"context_line":"            data[\u0027reservationSize\u0027] \u003d share[\u0027size\u0027] * units.Gi\r"},{"line_number":189,"context_line":"        self.nef.post(url, data)\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_b592e349","line":186,"range":{"start_line":186,"start_character":55,"end_line":186,"end_character":56},"in_reply_to":"9ad45d7e_869fa802","updated":"2016-08-19 09:03:48.000000000","message":"Done","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            self._add_permission(share[\u0027name\u0027])\r"},{"line_number":193,"context_line":"        except exception.NexentaException:\r"},{"line_number":194,"context_line":"            LOG.exception(\r"},{"line_number":195,"context_line":"                _LE(\u0027Failed to add permissions for %s\u0027) % share[\u0027name\u0027])\r"},{"line_number":196,"context_line":"            try:\r"},{"line_number":197,"context_line":"                self.delete_share(None, share)\r"},{"line_number":198,"context_line":"            except exception.NexentaException:\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_a6ad8c33","line":195,"range":{"start_line":195,"start_character":56,"end_line":195,"end_character":57},"updated":"2016-08-08 21:02:39.000000000","message":"Comma.\n\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#adding-variables-to-log-messages","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":221,"context_line":"        \"\"\"Extends a share.\"\"\"\r"},{"line_number":222,"context_line":"        LOG.debug(\r"},{"line_number":223,"context_line":"            \u0027Extending share: %(name)s to %(size)sG.\u0027 % (\r"},{"line_number":224,"context_line":"                {\u0027name\u0027: share[\u0027name\u0027], \u0027size\u0027: new_size}))\r"},{"line_number":225,"context_line":"        self._set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":226,"context_line":"        self.provisioned_capacity +\u003d (new_size - share[\u0027size\u0027])\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_06829894","line":223,"range":{"start_line":223,"start_character":54,"end_line":223,"end_character":55},"updated":"2016-08-08 21:02:39.000000000","message":"Comma.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        self._set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":226,"context_line":"        self.provisioned_capacity +\u003d (new_size - share[\u0027size\u0027])\r"},{"line_number":227,"context_line":"\r"},{"line_number":228,"context_line":"    def shrink_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":229,"context_line":"        \"\"\"Shrinks size of existing share.\"\"\"\r"},{"line_number":230,"context_line":"        LOG.debug(\r"},{"line_number":231,"context_line":"            \u0027Shrinking share: %(name)s to %(size)sG.\u0027, (\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_a979dd31","line":228,"range":{"start_line":228,"start_character":8,"end_line":228,"end_character":20},"updated":"2016-08-08 21:02:39.000000000","message":"What if the data in the share is greater than the new size?  If possible, you should detect that condition and raise ShareShrinkingPossibleDataLoss.  Example here:  https://review.openstack.org/#/c/329134/18/manila/share/drivers/hitachi/hsp.py","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    def shrink_share(self, share, new_size, share_server\u003dNone):\r"},{"line_number":229,"context_line":"        \"\"\"Shrinks size of existing share.\"\"\"\r"},{"line_number":230,"context_line":"        LOG.debug(\r"},{"line_number":231,"context_line":"            \u0027Shrinking share: %(name)s to %(size)sG.\u0027, (\r"},{"line_number":232,"context_line":"                {\u0027name\u0027: share[\u0027name\u0027], \u0027size\u0027: new_size}))\r"},{"line_number":233,"context_line":"        self._set_quota(share[\u0027name\u0027], new_size)\r"},{"line_number":234,"context_line":"        self.provisioned_capacity +\u003d (share[\u0027size\u0027] - new_size)\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_69e24505","line":231,"range":{"start_line":231,"start_character":55,"end_line":231,"end_character":56},"updated":"2016-08-08 21:02:39.000000000","message":"Why the extra parentheses?","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":237,"context_line":"        \"\"\"Create a snapshot.\"\"\"\r"},{"line_number":238,"context_line":"        LOG.debug(\u0027Creating a snapshot of share: %s.\u0027\r"},{"line_number":239,"context_line":"                  % snapshot[\u0027share_name\u0027])\r"},{"line_number":240,"context_line":"        url \u003d \u0027storage/pools/%(pool)s/filesystems/%(fs)s/snapshots\u0027 % {\r"},{"line_number":241,"context_line":"            \u0027pool\u0027: self.pool_name,\r"},{"line_number":242,"context_line":"            \u0027fs\u0027: PATH_DELIMITER.join(\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_6649d48b","line":239,"range":{"start_line":239,"start_character":18,"end_line":239,"end_character":19},"updated":"2016-08-08 21:02:39.000000000","message":"Comma.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":247,"context_line":"\r"},{"line_number":248,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):\r"},{"line_number":249,"context_line":"        \"\"\"Delete a snapshot.\"\"\"\r"},{"line_number":250,"context_line":"        LOG.debug(\u0027Deleting a snapshot: %(shr_name)s@%(snap_name)s.\u0027, ({\r"},{"line_number":251,"context_line":"            \u0027shr_name\u0027: snapshot[\u0027share_name\u0027],\r"},{"line_number":252,"context_line":"            \u0027snap_name\u0027: snapshot[\u0027name\u0027]}))\r"},{"line_number":253,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_a622acb7","line":250,"range":{"start_line":250,"start_character":70,"end_line":250,"end_character":71},"updated":"2016-08-08 21:02:39.000000000","message":"Why the extra parentheses?","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        except exception.NexentaException as e:\r"},{"line_number":262,"context_line":"            if e.kwargs[\u0027code\u0027] \u003d\u003d \u0027ENOENT\u0027:\r"},{"line_number":263,"context_line":"                LOG.warning(\r"},{"line_number":264,"context_line":"                    _LW(\u0027snapshot %(name)s not found, response: %(msg)s\u0027) % {\r"},{"line_number":265,"context_line":"                        \u0027name\u0027: snapshot[\u0027name\u0027], \u0027msg\u0027: e.msg})\r"},{"line_number":266,"context_line":"            else:\r"},{"line_number":267,"context_line":"                raise\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_49ff8101","line":264,"range":{"start_line":264,"start_character":74,"end_line":264,"end_character":75},"updated":"2016-08-08 21:02:39.000000000","message":"Comma.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                        reason\u003d_(\r"},{"line_number":313,"context_line":"                            \u0027\u003c{}\u003e is not a valid access parameter\u0027).format(\r"},{"line_number":314,"context_line":"                                addr))\r"},{"line_number":315,"context_line":"            new_sc \u003d {\r"},{"line_number":316,"context_line":"                \"securityModes\": [\"sys\"]\r"},{"line_number":317,"context_line":"            }\r"},{"line_number":318,"context_line":"            new_sc[\u0027readWriteList\u0027] \u003d ls\r"},{"line_number":319,"context_line":"            security_contexts.append(new_sc)\r"},{"line_number":320,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_091e2963","line":317,"range":{"start_line":315,"start_character":12,"end_line":317,"end_character":13},"updated":"2016-08-08 21:02:39.000000000","message":"Unwrap (it all fits on one line).","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            security_contexts.append(new_sc)\r"},{"line_number":320,"context_line":"\r"},{"line_number":321,"context_line":"        for addr in ro_list:\r"},{"line_number":322,"context_line":"            address_mask \u003d addr.strip().split(\u0027/\u0027, 1)\r"},{"line_number":323,"context_line":"            address \u003d address_mask[0]\r"},{"line_number":324,"context_line":"            ls \u003d [{\"allow\": True, \"etype\": \"network\", \"entity\": address}]\r"},{"line_number":325,"context_line":"            if len(address_mask) \u003d\u003d 2:\r"},{"line_number":326,"context_line":"                try:\r"},{"line_number":327,"context_line":"                    mask \u003d int(address_mask[1])\r"},{"line_number":328,"context_line":"                    if mask !\u003d 32:\r"},{"line_number":329,"context_line":"                        ls[0][\u0027mask\u0027] \u003d mask\r"},{"line_number":330,"context_line":"                except Exception:\r"},{"line_number":331,"context_line":"                    raise exception.InvalidInput(\r"},{"line_number":332,"context_line":"                        reason\u003d_(\r"},{"line_number":333,"context_line":"                            \u0027\u003c{}\u003e is not a valid access parameter\u0027).format(\r"},{"line_number":334,"context_line":"                                addr))\r"},{"line_number":335,"context_line":"            new_sc \u003d {\r"},{"line_number":336,"context_line":"                \"securityModes\": [\"sys\"]\r"},{"line_number":337,"context_line":"            }\r"},{"line_number":338,"context_line":"            new_sc[\u0027readOnlyList\u0027] \u003d ls\r"},{"line_number":339,"context_line":"            security_contexts.append(new_sc)\r"},{"line_number":340,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_a93efdb5","line":337,"range":{"start_line":322,"start_character":0,"end_line":337,"end_character":13},"updated":"2016-08-08 21:02:39.000000000","message":"This block is duplicated from the previous for loop.  Please replace both copies with a helper method.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":345,"context_line":"\r"},{"line_number":346,"context_line":"    def _set_quota(self, share_name, new_size):\r"},{"line_number":347,"context_line":"        quota \u003d new_size * units.Gi\r"},{"line_number":348,"context_line":"        data \u003d {\r"},{"line_number":349,"context_line":"            \u0027quotaSize\u0027: quota\r"},{"line_number":350,"context_line":"        }\r"},{"line_number":351,"context_line":"        if not self.configuration.nexenta_thin_provisioning:\r"},{"line_number":352,"context_line":"            data[\u0027reservationSize\u0027] \u003d quota\r"},{"line_number":353,"context_line":"        url \u003d \u0027storage/pools/{}/filesystems/{}%2F{}\u0027.format(self.pool_name,\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_e95f550c","line":350,"range":{"start_line":348,"start_character":0,"end_line":350,"end_character":9},"updated":"2016-08-08 21:02:39.000000000","message":"Unwrap.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        share \u003d \u0027:/\u0027.join((self.nef_host, self.fs_prefix))\r"},{"line_number":361,"context_line":"        total, free, allocated \u003d self._get_capacity_info(share)\r"},{"line_number":362,"context_line":"\r"},{"line_number":363,"context_line":"        data \u003d {\r"},{"line_number":364,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"},{"line_number":365,"context_line":"            \u0027storage_protocol\u0027: self.storage_protocol,\r"},{"line_number":366,"context_line":"            \u0027total_capacity_gb\u0027: total,\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_2987ad62","line":363,"range":{"start_line":363,"start_character":8,"end_line":363,"end_character":12},"updated":"2016-08-08 21:02:39.000000000","message":"Why not include the common capabilities?\n\nhttps://github.com/openstack/manila/blob/master/doc/source/devref/capabilities_and_extra_specs.rst","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        data \u003d {\r"},{"line_number":364,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"},{"line_number":365,"context_line":"            \u0027storage_protocol\u0027: self.storage_protocol,\r"},{"line_number":366,"context_line":"            \u0027total_capacity_gb\u0027: total,\r"},{"line_number":367,"context_line":"            \u0027free_capacity_gb\u0027: free,\r"},{"line_number":368,"context_line":"            \u0027reserved_percentage\u0027: (\r"},{"line_number":369,"context_line":"                self.configuration.reserved_share_percentage),\r"},{"line_number":370,"context_line":"            \u0027nfs_mount_point_base\u0027: self.nfs_mount_point_base,\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_c3b0728e","line":367,"range":{"start_line":366,"start_character":0,"end_line":367,"end_character":37},"updated":"2016-08-08 21:02:39.000000000","message":"Please report capacity using the pools mechanism, even if your backend only has one pool.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                \"read_acl\",\r"},{"line_number":422,"context_line":"                \"write_acl\",\r"},{"line_number":423,"context_line":"                \"write_owner\",\r"},{"line_number":424,"context_line":"                \"synchronize\"\r"},{"line_number":425,"context_line":"            ],\r"},{"line_number":426,"context_line":"            \"flags\": [\r"},{"line_number":427,"context_line":"                \"file_inherit\",\r"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_09bf49fc","line":424,"range":{"start_line":424,"start_character":28,"end_line":424,"end_character":29},"updated":"2016-08-08 21:02:39.000000000","message":"3 trailing commas needed in this structure...","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0486f921d3bbad948c793f89932e9a9597195aab","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                path))\r"},{"line_number":122,"context_line":"        self.get_provisioned_capacity()\r"},{"line_number":123,"context_line":"\r"},{"line_number":124,"context_line":"    def get_provisioned_capacity(self):\r"},{"line_number":125,"context_line":"        path \u003d \u0027%(pool)s/%(fs)s\u0027 % {\r"},{"line_number":126,"context_line":"            \u0027pool\u0027: self.pool_name, \u0027fs\u0027: self.fs_prefix}\r"},{"line_number":127,"context_line":"        url \u003d \u0027storage/filesystems?parent\u003d%s\u0027 % path\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"1ac06dbe_5f8433b0","line":124,"range":{"start_line":124,"start_character":8,"end_line":124,"end_character":32},"updated":"2016-08-25 08:42:37.000000000","message":"_get_provisioned_capacity","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0486f921d3bbad948c793f89932e9a9597195aab","unresolved":false,"context_lines":[{"line_number":300,"context_line":"                msg \u003d _(\u0027Only IP access type is supported.\u0027)\r"},{"line_number":301,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)\r"},{"line_number":302,"context_line":"            else:\r"},{"line_number":303,"context_line":"                if rule[\u0027access_level\u0027] \u003d\u003d \u0027rw\u0027:\r"},{"line_number":304,"context_line":"                    rw_list.append(rule[\u0027access_to\u0027])\r"},{"line_number":305,"context_line":"                else:\r"},{"line_number":306,"context_line":"                    ro_list.append(rule[\u0027access_to\u0027])\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"1ac06dbe_9415f2e6","line":303,"range":{"start_line":303,"start_character":43,"end_line":303,"end_character":47},"updated":"2016-08-25 08:42:37.000000000","message":"common.ACCESS_LEVEL_RW","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0486f921d3bbad948c793f89932e9a9597195aab","unresolved":false,"context_lines":[{"line_number":343,"context_line":"\r"},{"line_number":344,"context_line":"    def _update_share_stats(self, data\u003dNone):\r"},{"line_number":345,"context_line":"        super(NexentaNasDriver, self)._update_share_stats()\r"},{"line_number":346,"context_line":"        share \u003d \u0027:/\u0027.join((self.nef_host, self.fs_prefix))\r"},{"line_number":347,"context_line":"        total, free, allocated \u003d self._get_capacity_info(share)\r"},{"line_number":348,"context_line":"\r"},{"line_number":349,"context_line":"        data \u003d {\r"},{"line_number":350,"context_line":"            \u0027vendor_name\u0027: \u0027Nexenta\u0027,\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"1ac06dbe_94edf2b9","line":347,"range":{"start_line":346,"start_character":8,"end_line":347,"end_character":63},"updated":"2016-08-25 08:42:37.000000000","message":"Which one is correct? because share can not be used in _get_capacity_info function.","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0486f921d3bbad948c793f89932e9a9597195aab","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        }\r"},{"line_number":369,"context_line":"        self._stats.update(data)\r"},{"line_number":370,"context_line":"\r"},{"line_number":371,"context_line":"    def _get_capacity_info(self, path):\r"},{"line_number":372,"context_line":"        \"\"\"Calculate available space on the NFS share.\r"},{"line_number":373,"context_line":"\r"},{"line_number":374,"context_line":"        :param path: example pool/nfs\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"1ac06dbe_d4912a48","line":371,"range":{"start_line":371,"start_character":33,"end_line":371,"end_character":37},"updated":"2016-08-25 08:42:37.000000000","message":"This parameter not be used.","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"d3ed1116ad9c189c0b47283b948996abca1573d5","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        }\r"},{"line_number":369,"context_line":"        self._stats.update(data)\r"},{"line_number":370,"context_line":"\r"},{"line_number":371,"context_line":"    def _get_capacity_info(self, path):\r"},{"line_number":372,"context_line":"        \"\"\"Calculate available space on the NFS share.\r"},{"line_number":373,"context_line":"\r"},{"line_number":374,"context_line":"        :param path: example pool/nfs\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa7ab95a_58d92c56","line":371,"range":{"start_line":371,"start_character":33,"end_line":371,"end_character":37},"in_reply_to":"1ac06dbe_d4912a48","updated":"2016-08-30 13:29:49.000000000","message":"Done","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0486f921d3bbad948c793f89932e9a9597195aab","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        url \u003d \u0027storage/pools/{}/filesystems/{}\u0027.format(self.pool_name,\r"},{"line_number":377,"context_line":"                                                       self.fs_prefix)\r"},{"line_number":378,"context_line":"        data \u003d self.nef.get(url)\r"},{"line_number":379,"context_line":"        total \u003d utils.bytes_to_gb(data[\u0027bytesAvailable\u0027])\r"},{"line_number":380,"context_line":"        allocated \u003d utils.bytes_to_gb(data[\u0027bytesUsed\u0027])\r"},{"line_number":381,"context_line":"        free \u003d total - allocated\r"},{"line_number":382,"context_line":"        return total, free, allocated\r"},{"line_number":383,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"1ac06dbe_740cb642","line":380,"range":{"start_line":379,"start_character":8,"end_line":380,"end_character":56},"updated":"2016-08-25 08:42:37.000000000","message":"The unit should be a float.","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"72b15566ace7516b62958ad9ce21ad9afc2fa656","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        url \u003d \u0027storage/pools/{}/filesystems/{}\u0027.format(self.pool_name,\r"},{"line_number":377,"context_line":"                                                       self.fs_prefix)\r"},{"line_number":378,"context_line":"        data \u003d self.nef.get(url)\r"},{"line_number":379,"context_line":"        total \u003d utils.bytes_to_gb(data[\u0027bytesAvailable\u0027])\r"},{"line_number":380,"context_line":"        allocated \u003d utils.bytes_to_gb(data[\u0027bytesUsed\u0027])\r"},{"line_number":381,"context_line":"        free \u003d total - allocated\r"},{"line_number":382,"context_line":"        return total, free, allocated\r"},{"line_number":383,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa7ab95a_a7ab9388","line":380,"range":{"start_line":379,"start_character":8,"end_line":380,"end_character":56},"in_reply_to":"1ac06dbe_740cb642","updated":"2016-08-26 16:57:27.000000000","message":"why? In this doc they are Int:\nhttp://docs.openstack.org/developer/manila/devref/capabilities_and_extra_specs.html#developer-impact","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"d3ed1116ad9c189c0b47283b948996abca1573d5","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        url \u003d \u0027storage/pools/{}/filesystems/{}\u0027.format(self.pool_name,\r"},{"line_number":377,"context_line":"                                                       self.fs_prefix)\r"},{"line_number":378,"context_line":"        data \u003d self.nef.get(url)\r"},{"line_number":379,"context_line":"        total \u003d utils.bytes_to_gb(data[\u0027bytesAvailable\u0027])\r"},{"line_number":380,"context_line":"        allocated \u003d utils.bytes_to_gb(data[\u0027bytesUsed\u0027])\r"},{"line_number":381,"context_line":"        free \u003d total - allocated\r"},{"line_number":382,"context_line":"        return total, free, allocated\r"},{"line_number":383,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa7ab95a_b5616107","line":380,"range":{"start_line":379,"start_character":8,"end_line":380,"end_character":56},"in_reply_to":"fa7ab95a_8247444a","updated":"2016-08-30 13:29:49.000000000","message":"Done. Changed utils method to return float.","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"62daa16fa51dac769f0e2bb623723795ae0e24a3","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        url \u003d \u0027storage/pools/{}/filesystems/{}\u0027.format(self.pool_name,\r"},{"line_number":377,"context_line":"                                                       self.fs_prefix)\r"},{"line_number":378,"context_line":"        data \u003d self.nef.get(url)\r"},{"line_number":379,"context_line":"        total \u003d utils.bytes_to_gb(data[\u0027bytesAvailable\u0027])\r"},{"line_number":380,"context_line":"        allocated \u003d utils.bytes_to_gb(data[\u0027bytesUsed\u0027])\r"},{"line_number":381,"context_line":"        free \u003d total - allocated\r"},{"line_number":382,"context_line":"        return total, free, allocated\r"},{"line_number":383,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa7ab95a_8247444a","line":380,"range":{"start_line":379,"start_character":8,"end_line":380,"end_character":56},"in_reply_to":"fa7ab95a_a7ab9388","updated":"2016-08-27 03:24:59.000000000","message":"Please see this links: https://github.com/openstack/manila/blob/master/manila/scheduler/filters/capacity.py#L61\n\nhttps://review.openstack.org/#/c/256224/1/manila/share/drivers/emc/plugins/vnx/connection.py\nhttps://review.openstack.org/#/c/209709/4..3/manila/share/drivers/hp/hp_3par_mediator.py","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.pool_name \u003d self.configuration.nexenta_pool\r"},{"line_number":65,"context_line":"        self.fs_prefix \u003d self.configuration.nexenta_nfs_share\r"},{"line_number":66,"context_line":"\r"},{"line_number":67,"context_line":"        self.storage_protocol \u003d \u0027NFS\u0027\r"},{"line_number":68,"context_line":"        self.nfs_mount_point_base \u003d self.configuration.nexenta_mount_point_base\r"},{"line_number":69,"context_line":"        self.dataset_compression \u003d (\r"},{"line_number":70,"context_line":"            self.configuration.nexenta_dataset_compression)\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_42fab543","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":37},"updated":"2016-08-26 17:17:27.000000000","message":"So you won\u0027t be supporting SMB with NexentaStor5?  Or if so, why is there not the same NFS helper arrangement here?  I\u0027m just interested in your laying the groundwork for the future that doesn\u0027t include a big refactor.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.pool_name \u003d self.configuration.nexenta_pool\r"},{"line_number":65,"context_line":"        self.fs_prefix \u003d self.configuration.nexenta_nfs_share\r"},{"line_number":66,"context_line":"\r"},{"line_number":67,"context_line":"        self.storage_protocol \u003d \u0027NFS\u0027\r"},{"line_number":68,"context_line":"        self.nfs_mount_point_base \u003d self.configuration.nexenta_mount_point_base\r"},{"line_number":69,"context_line":"        self.dataset_compression \u003d (\r"},{"line_number":70,"context_line":"            self.configuration.nexenta_dataset_compression)\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_6eb15f8f","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":37},"in_reply_to":"fa7ab95a_42fab543","updated":"2016-08-30 13:44:03.000000000","message":"no plans on supporting smb for ns5","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                        (self.fs_prefix, share[\u0027name\u0027])), \u0027exc\u0027: exc})\r"},{"line_number":163,"context_line":"            raise\r"},{"line_number":164,"context_line":"        self.provisioned_capacity +\u003d share[\u0027size\u0027]\r"},{"line_number":165,"context_line":"        return location\r"},{"line_number":166,"context_line":"\r"},{"line_number":167,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,\r"},{"line_number":168,"context_line":"                                   share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_e27749d2","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":23},"updated":"2016-08-26 17:17:27.000000000","message":"Please return export location(s) as a list.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                        (self.fs_prefix, share[\u0027name\u0027])), \u0027exc\u0027: exc})\r"},{"line_number":163,"context_line":"            raise\r"},{"line_number":164,"context_line":"        self.provisioned_capacity +\u003d share[\u0027size\u0027]\r"},{"line_number":165,"context_line":"        return location\r"},{"line_number":166,"context_line":"\r"},{"line_number":167,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,\r"},{"line_number":168,"context_line":"                                   share_server\u003dNone):\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_8e2143b7","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":23},"in_reply_to":"fa7ab95a_e27749d2","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            raise\r"},{"line_number":206,"context_line":"\r"},{"line_number":207,"context_line":"        self.provisioned_capacity +\u003d share[\u0027size\u0027]\r"},{"line_number":208,"context_line":"        return location\r"},{"line_number":209,"context_line":"\r"},{"line_number":210,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):\r"},{"line_number":211,"context_line":"        \"\"\"Delete a share.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_624a5985","line":208,"range":{"start_line":208,"start_character":8,"end_line":208,"end_character":23},"updated":"2016-08-26 17:17:27.000000000","message":"Please return export location(s) as a list.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            raise\r"},{"line_number":206,"context_line":"\r"},{"line_number":207,"context_line":"        self.provisioned_capacity +\u003d share[\u0027size\u0027]\r"},{"line_number":208,"context_line":"        return location\r"},{"line_number":209,"context_line":"\r"},{"line_number":210,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):\r"},{"line_number":211,"context_line":"        \"\"\"Delete a share.\"\"\"\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_2e3cb7e1","line":208,"range":{"start_line":208,"start_character":8,"end_line":208,"end_character":23},"in_reply_to":"fa7ab95a_624a5985","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        \"\"\"Delete a share.\"\"\"\r"},{"line_number":212,"context_line":"        LOG.debug(\u0027Deleting share: %s.\u0027, share[\u0027name\u0027])\r"},{"line_number":213,"context_line":"\r"},{"line_number":214,"context_line":"        url \u003d (\u0027storage/pools/%(pool)s/filesystems/%(fs)s\u0027) % {\r"},{"line_number":215,"context_line":"            \u0027pool\u0027: self.pool_name,\r"},{"line_number":216,"context_line":"            \u0027fs\u0027: PATH_DELIMITER.join([self.fs_prefix, share[\u0027name\u0027]]),\r"},{"line_number":217,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_985a7082","line":214,"range":{"start_line":214,"start_character":14,"end_line":214,"end_character":59},"updated":"2016-08-26 17:17:27.000000000","message":"Redundant parentheses.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        \"\"\"Delete a share.\"\"\"\r"},{"line_number":212,"context_line":"        LOG.debug(\u0027Deleting share: %s.\u0027, share[\u0027name\u0027])\r"},{"line_number":213,"context_line":"\r"},{"line_number":214,"context_line":"        url \u003d (\u0027storage/pools/%(pool)s/filesystems/%(fs)s\u0027) % {\r"},{"line_number":215,"context_line":"            \u0027pool\u0027: self.pool_name,\r"},{"line_number":216,"context_line":"            \u0027fs\u0027: PATH_DELIMITER.join([self.fs_prefix, share[\u0027name\u0027]]),\r"},{"line_number":217,"context_line":"        }\r"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_0e3533f6","line":214,"range":{"start_line":214,"start_character":14,"end_line":214,"end_character":59},"in_reply_to":"fa7ab95a_985a7082","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"}],"manila/share/drivers/nexenta/options.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7e696991ef9647aa00ef47a4af5731e66700e335","unresolved":false,"context_lines":[{"line_number":57,"context_line":"NEXENTA_NFS_OPTS \u003d ["},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027nexenta_mount_point_base\u0027,"},{"line_number":59,"context_line":"               default\u003d\u0027$state_path/mnt\u0027,"},{"line_number":60,"context_line":"               help\u003d\u0027Base directory that contains NFS share mount points\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027nexenta_nms_cache_volroot\u0027,"},{"line_number":62,"context_line":"                default\u003dTrue,"},{"line_number":63,"context_line":"                help\u003d(\u0027If set True cache NexentaStor appliance volroot option \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_a418d076","line":60,"range":{"start_line":60,"start_character":66,"end_line":60,"end_character":72},"updated":"2016-04-22 15:52:10.000000000","message":"Add periods at the end of all help text..","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0656f99e0f53eb6c45b8a0d150b654e4a27ecf6a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"CONF \u003d cfg.CONF"},{"line_number":88,"context_line":"CONF.register_opts(NEXENTA_CONNECTION_OPTS)"},{"line_number":89,"context_line":"CONF.register_opts(NEXENTA_DATASET_OPTS)"},{"line_number":90,"context_line":"CONF.register_opts(NEXENTA_NFS_OPTS)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_1caaa7d2","line":90,"range":{"start_line":88,"start_character":0,"end_line":90,"end_character":36},"updated":"2016-04-23 03:14:33.000000000","message":"You define new config opts.\nSee following change:\nhttps://github.com/openstack/manila/commit/883e02f2\nSo, to be able to add this new config options to generation of config sample, you need add it to the \" manila/opts.py\" module.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":47,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027pool name on NexentaStor\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":51,"context_line":"               help\u003d(\u0027on if share over NFS is enabled\u0027)),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nexenta_smb\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027off\u0027,"},{"line_number":54,"context_line":"               help\u003d(\u0027on if share over SMB is enabled\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_7228f2e2","line":51,"range":{"start_line":49,"start_character":4,"end_line":51,"end_character":57},"updated":"2016-05-10 16:16:11.000000000","message":"shouldn\u0027t this be boolean? (BoolOpt)","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"4489c0ef8c1ab92d8543969a8a8a867b6e63a6e7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":47,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027pool name on NexentaStor\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":51,"context_line":"               help\u003d(\u0027on if share over NFS is enabled\u0027)),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nexenta_smb\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027off\u0027,"},{"line_number":54,"context_line":"               help\u003d(\u0027on if share over SMB is enabled\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_358e1d2e","line":51,"range":{"start_line":49,"start_character":4,"end_line":51,"end_character":57},"in_reply_to":"dab17558_7228f2e2","updated":"2016-05-11 15:41:23.000000000","message":"not really, for some weird reason our backend is waiting for str here.","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7c3100d1016387b71f7ceb8b3fbbd74316064183","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":51,"context_line":"               help\u003d(\u0027on if share over NFS is enabled\u0027)),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nexenta_smb\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027off\u0027,"},{"line_number":54,"context_line":"               help\u003d(\u0027on if share over SMB is enabled\u0027))"},{"line_number":55,"context_line":"]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"NEXENTA_NFS_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_d27f1ede","line":54,"range":{"start_line":52,"start_character":0,"end_line":54,"end_character":56},"updated":"2016-05-10 16:16:11.000000000","message":"same as above","commit_id":"39e6bb71e4e0e2cb98734b58ca7001eadf7a1902"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":85,"context_line":"]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"CONF \u003d cfg.CONF"},{"line_number":88,"context_line":"CONF.register_opts(nexenta_connection_opts)"},{"line_number":89,"context_line":"CONF.register_opts(nexenta_dataset_opts)"},{"line_number":90,"context_line":"CONF.register_opts(nexenta_nfs_opts)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_3f6c0908","line":90,"range":{"start_line":88,"start_character":0,"end_line":90,"end_character":36},"updated":"2016-05-12 14:00:07.000000000","message":"All these opts you register in driver, and, moreover, you require and use only those definitions. Therefore, registration of these opts in \"DEFAULT\" group, that is done here is redundant.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"nexenta_connection_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027nexenta_host\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":28,"context_line":"               help\u003d\u0027IP address of Nexenta SA.\u0027),"},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"},{"line_number":30,"context_line":"               default\u003d8457,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_b603d872","line":27,"range":{"start_line":27,"start_character":23,"end_line":27,"end_character":25},"updated":"2016-07-04 14:49:23.000000000","message":"Default \"empty string\" will lead to error. In that case better to remove default value and add \"required\u003dTrue\" argument here.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"nexenta_connection_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027nexenta_host\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":28,"context_line":"               help\u003d\u0027IP address of Nexenta SA.\u0027),"},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"},{"line_number":30,"context_line":"               default\u003d8457,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_543e7e28","line":27,"range":{"start_line":27,"start_character":23,"end_line":27,"end_character":25},"in_reply_to":"1aa78d24_b603d872","updated":"2016-07-06 15:22:57.000000000","message":"fixing","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"               help\u003d\u0027IP address of Nexenta SA.\u0027),"},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"},{"line_number":30,"context_line":"               default\u003d8457,"},{"line_number":31,"context_line":"               help\u003d\u0027HTTP port to connect to Nexenta REST API server.\u0027),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027nexenta_retry_count\u0027,"},{"line_number":33,"context_line":"               default\u003d6,"},{"line_number":34,"context_line":"               help\u003d\u0027Number of retries for unsuccessful API calls.\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_f66a8019","line":31,"range":{"start_line":31,"start_character":21,"end_line":31,"end_character":69},"updated":"2016-07-04 14:49:23.000000000","message":"According to \"nexenta_rest_protocol\" option, defined below, it can also be HTTPS.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"               help\u003d\u0027IP address of Nexenta SA.\u0027),"},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"},{"line_number":30,"context_line":"               default\u003d8457,"},{"line_number":31,"context_line":"               help\u003d\u0027HTTP port to connect to Nexenta REST API server.\u0027),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027nexenta_retry_count\u0027,"},{"line_number":33,"context_line":"               default\u003d6,"},{"line_number":34,"context_line":"               help\u003d\u0027Number of retries for unsuccessful API calls.\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_f42cca03","line":31,"range":{"start_line":31,"start_character":21,"end_line":31,"end_character":69},"in_reply_to":"1aa78d24_f66a8019","updated":"2016-07-06 15:22:57.000000000","message":"correct, \"HTTP/HTTPS port\" would be the right way?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"               help\u003d\u0027HTTP port to connect to Nexenta REST API server.\u0027),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027nexenta_retry_count\u0027,"},{"line_number":33,"context_line":"               default\u003d6,"},{"line_number":34,"context_line":"               help\u003d\u0027Number of retries for unsuccessful API calls.\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_protocol\u0027,"},{"line_number":36,"context_line":"               default\u003d\u0027auto\u0027,"},{"line_number":37,"context_line":"               choices\u003d[\u0027http\u0027, \u0027https\u0027, \u0027auto\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_5621d4fa","line":34,"range":{"start_line":34,"start_character":21,"end_line":34,"end_character":69},"updated":"2016-07-04 14:49:23.000000000","message":"Where is time gap, that should be used between attempts, set up?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"               help\u003d\u0027HTTP port to connect to Nexenta REST API server.\u0027),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027nexenta_retry_count\u0027,"},{"line_number":33,"context_line":"               default\u003d6,"},{"line_number":34,"context_line":"               help\u003d\u0027Number of retries for unsuccessful API calls.\u0027),"},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_protocol\u0027,"},{"line_number":36,"context_line":"               default\u003d\u0027auto\u0027,"},{"line_number":37,"context_line":"               choices\u003d[\u0027http\u0027, \u0027https\u0027, \u0027auto\u0027],"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_94d626ef","line":34,"range":{"start_line":34,"start_character":21,"end_line":34,"end_character":69},"in_reply_to":"1aa78d24_5621d4fa","updated":"2016-07-06 15:22:57.000000000","message":"default value is just fine for our backend, is it a must to make it configurable?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027User name to connect to Nexenta SA.\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027nexenta_password\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027nexenta\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027Password to connect to Nexenta S.A\u0027,"},{"line_number":45,"context_line":"               secret\u003dTrue),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_b6d638c3","line":43,"updated":"2016-07-04 14:49:23.000000000","message":"All \"password\"y config options should have \"secret\u003dTrue\" argument.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027User name to connect to Nexenta SA.\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027nexenta_password\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027nexenta\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027Password to connect to Nexenta S.A\u0027,"},{"line_number":45,"context_line":"               secret\u003dTrue),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_f4132ab6","line":43,"in_reply_to":"1aa78d24_b6d638c3","updated":"2016-07-06 15:22:57.000000000","message":"will do","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               secret\u003dTrue),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"},{"line_number":47,"context_line":"               default\u003d\u0027volume1\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027volume name on NexentaStor.\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_16dc6ce3","line":48,"range":{"start_line":48,"start_character":21,"end_line":48,"end_character":48},"updated":"2016-07-04 14:49:23.000000000","message":"It is parent volume? Or what?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               secret\u003dTrue),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"},{"line_number":47,"context_line":"               default\u003d\u0027volume1\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027volume name on NexentaStor.\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_9453c638","line":48,"range":{"start_line":48,"start_character":21,"end_line":48,"end_character":48},"in_reply_to":"1aa78d24_16dc6ce3","updated":"2016-07-06 15:22:57.000000000","message":"this is how the pool is called on ns4 appliance. Having 2 vars (nexenta_volume and nexenta_pool) to be consistent to how they are called on appliance, so the customers will not be confused.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"},{"line_number":47,"context_line":"               default\u003d\u0027volume1\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027volume name on NexentaStor.\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027on if share over NFS is enabled.\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_36fa4843","line":51,"range":{"start_line":49,"start_character":4,"end_line":51,"end_character":46},"updated":"2016-07-04 14:49:23.000000000","message":"Why only one pool is used? Manila supports more than one pool per backend.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027on if share over NFS is enabled.\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027nexenta_smb\u0027,"},{"line_number":56,"context_line":"               default\u003d\u0027off\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027on if share over SMB is enabled.\u0027)"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"nexenta_nfs_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_56dc3412","line":57,"range":{"start_line":52,"start_character":4,"end_line":57,"end_character":55},"updated":"2016-07-04 14:49:23.000000000","message":"Why these opts are \"StrOpt\" and not \"BoolOpt\" when they are booleans?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":50,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027on if share over NFS is enabled.\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027nexenta_smb\u0027,"},{"line_number":56,"context_line":"               default\u003d\u0027off\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027on if share over SMB is enabled.\u0027)"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"nexenta_nfs_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_14151648","line":57,"range":{"start_line":52,"start_character":4,"end_line":57,"end_character":55},"in_reply_to":"1aa78d24_56dc3412","updated":"2016-07-06 15:22:57.000000000","message":"ns4 is waiting 1 of those 2 values, not bools. Dunno if I should change opts to boolean and then translate them to str before sending request?","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"nexenta_dataset_opts \u003d ["},{"line_number":71,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs_share\u0027,"},{"line_number":72,"context_line":"               default\u003d\u0027nfs_share\u0027,"},{"line_number":73,"context_line":"               help\u003d\u0027NFS share on NexentaStor.\u0027),"},{"line_number":74,"context_line":"    cfg.StrOpt(\u0027nexenta_dataset_compression\u0027,"},{"line_number":75,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":76,"context_line":"               choices\u003d[\u0027on\u0027, \u0027off\u0027, \u0027gzip\u0027, \u0027gzip-1\u0027, \u0027gzip-2\u0027, \u0027gzip-3\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_16146c42","line":73,"range":{"start_line":73,"start_character":21,"end_line":73,"end_character":46},"updated":"2016-07-04 14:49:23.000000000","message":"It is unclear what exactly do you mean by this.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"nexenta_dataset_opts \u003d ["},{"line_number":71,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs_share\u0027,"},{"line_number":72,"context_line":"               default\u003d\u0027nfs_share\u0027,"},{"line_number":73,"context_line":"               help\u003d\u0027NFS share on NexentaStor.\u0027),"},{"line_number":74,"context_line":"    cfg.StrOpt(\u0027nexenta_dataset_compression\u0027,"},{"line_number":75,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":76,"context_line":"               choices\u003d[\u0027on\u0027, \u0027off\u0027, \u0027gzip\u0027, \u0027gzip-1\u0027, \u0027gzip-2\u0027, \u0027gzip-3\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_c883f254","line":73,"range":{"start_line":73,"start_character":21,"end_line":73,"end_character":46},"in_reply_to":"1aa78d24_16146c42","updated":"2016-07-06 15:22:57.000000000","message":"This is a parent folder for all manila shares on NS. I guess \"Parent folder on NexentaStor.\" and the opt name \"nexenta_nfs_folder\" would make more sense","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a3e003b7dbc694b1353a3fc25aab4455977225cd","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"nexenta_connection_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027nexenta_host\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":28,"context_line":"               required\u003dTrue,"},{"line_number":29,"context_line":"               help\u003d\u0027IP address of Nexenta SA.\u0027),"},{"line_number":30,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"dada55a8_794d4ac3","line":27,"range":{"start_line":27,"start_character":15,"end_line":27,"end_character":26},"updated":"2016-07-27 09:56:46.000000000","message":"As said in PS15 [1] better to remove empty default value as it leads to error always.\n\n[1] https://review.openstack.org/#/c/309286/15..28/manila/share/drivers/nexenta/options.py","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a3e003b7dbc694b1353a3fc25aab4455977225cd","unresolved":false,"context_lines":[{"line_number":32,"context_line":"               help\u003d\u0027Rest port to connect to Nexenta REST API server.\u0027),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027nexenta_retry_count\u0027,"},{"line_number":34,"context_line":"               default\u003d6,"},{"line_number":35,"context_line":"               help\u003d\u0027Number of retries for unsuccessful API calls.\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_protocol\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027auto\u0027,"},{"line_number":38,"context_line":"               choices\u003d[\u0027http\u0027, \u0027https\u0027, \u0027auto\u0027],"}],"source_content_type":"text/x-python","patch_set":28,"id":"dada55a8_397ab2bd","line":35,"range":{"start_line":35,"start_character":21,"end_line":35,"end_character":66},"updated":"2016-07-27 09:56:46.000000000","message":"In PS15 [1] it was asked where one can get to know time gap that is used. What is default value?\n\n[1] https://review.openstack.org/#/c/309286/15..28/manila/share/drivers/nexenta/options.py","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"e043be7275b4c347c699079629260c9c19ccb967","unresolved":false,"context_lines":[{"line_number":32,"context_line":"               help\u003d\u0027Rest port to connect to Nexenta REST API server.\u0027),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027nexenta_retry_count\u0027,"},{"line_number":34,"context_line":"               default\u003d6,"},{"line_number":35,"context_line":"               help\u003d\u0027Number of retries for unsuccessful API calls.\u0027),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027nexenta_rest_protocol\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027auto\u0027,"},{"line_number":38,"context_line":"               choices\u003d[\u0027http\u0027, \u0027https\u0027, \u0027auto\u0027],"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_f2d14324","line":35,"range":{"start_line":35,"start_character":21,"end_line":35,"end_character":66},"in_reply_to":"dada55a8_397ab2bd","updated":"2016-08-02 14:12:41.000000000","message":"https://github.com/openstack/manila/blob/master/manila/utils.py#L549","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e478c9997e8858ba5caee48731eef72ed6f8b906","unresolved":false,"context_lines":[{"line_number":42,"context_line":"               help\u003d\u0027User name to connect to Nexenta SA.\u0027),"},{"line_number":43,"context_line":"    cfg.StrOpt(\u0027nexenta_password\u0027,"},{"line_number":44,"context_line":"               default\u003d\u0027nexenta\u0027,"},{"line_number":45,"context_line":"               help\u003d\u0027Password to connect to Nexenta S.A\u0027,"},{"line_number":46,"context_line":"               secret\u003dTrue),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"},{"line_number":48,"context_line":"               default\u003d\u0027volume1\u0027,"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_dd61eb3a","line":45,"range":{"start_line":45,"start_character":52,"end_line":45,"end_character":55},"updated":"2016-07-31 01:52:56.000000000","message":"SA? or S.A everywhere else..","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"a3e003b7dbc694b1353a3fc25aab4455977225cd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"},{"line_number":48,"context_line":"               default\u003d\u0027volume1\u0027,"},{"line_number":49,"context_line":"               help\u003d\u0027volume name on NexentaStor.\u0027),"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":51,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":52,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027on if share over NFS is enabled.\u0027),"}],"source_content_type":"text/x-python","patch_set":28,"id":"dada55a8_143fb5b4","line":52,"range":{"start_line":50,"start_character":4,"end_line":52,"end_character":49},"updated":"2016-07-27 09:56:46.000000000","message":"Carry-over comment from PS15 [1]:\n\n\"\"\"\nWhy only one pool is used? Manila supports more than one pool per backend.\n\"\"\"\n\n[1]  https://review.openstack.org/#/c/309286/15..28/manila/share/drivers/nexenta/options.py","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"2149dfc82ec197191b17dac24256938bb1c8cd47","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"},{"line_number":48,"context_line":"               default\u003d\u0027volume1\u0027,"},{"line_number":49,"context_line":"               help\u003d\u0027volume name on NexentaStor.\u0027),"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":51,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":52,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027on if share over NFS is enabled.\u0027),"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_3dca6350","line":52,"range":{"start_line":50,"start_character":4,"end_line":52,"end_character":49},"in_reply_to":"dada55a8_143fb5b4","updated":"2016-07-27 16:01:49.000000000","message":"we use pool and a parent filesystem in that pool to create filesystems, that will be used as manila shares. So I cannot pass a list of pools, since I don\u0027t know the name of parent FS in each of them.","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e478c9997e8858ba5caee48731eef72ed6f8b906","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027on if share over NFS is enabled.\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027nexenta_smb\u0027,"},{"line_number":57,"context_line":"               default\u003d\u0027off\u0027,"},{"line_number":58,"context_line":"               help\u003d\u0027on if share over SMB is enabled.\u0027)"},{"line_number":59,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_bd66b74e","line":56,"range":{"start_line":56,"start_character":16,"end_line":56,"end_character":27},"updated":"2016-07-31 01:52:56.000000000","message":"Where is this used?","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e478c9997e8858ba5caee48731eef72ed6f8b906","unresolved":false,"context_lines":[{"line_number":64,"context_line":"               help\u003d\u0027Base directory that contains NFS share mount points.\u0027),"},{"line_number":65,"context_line":"    cfg.BoolOpt(\u0027nexenta_nms_cache_volroot\u0027,"},{"line_number":66,"context_line":"                default\u003dTrue,"},{"line_number":67,"context_line":"                help\u003d(\u0027If set True cache NexentaStor appliance volroot option \u0027"},{"line_number":68,"context_line":"                      \u0027value.\u0027))"},{"line_number":69,"context_line":"]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"nexenta_dataset_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_1d58a389","line":68,"range":{"start_line":67,"start_character":23,"end_line":68,"end_character":29},"updated":"2016-07-31 01:52:56.000000000","message":"not clear what this means..","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"12ffb178369769f594f35ea8bcc3e6e565d50fe3","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"nexenta_connection_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027nexenta_host\u0027,"},{"line_number":27,"context_line":"               # required\u003dTrue,"},{"line_number":28,"context_line":"               help\u003d\u0027IP address of Nexenta SA.\u0027),"},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"},{"line_number":30,"context_line":"               default\u003d8457,"}],"source_content_type":"text/x-python","patch_set":31,"id":"bacf61ea_5ff89a7c","line":27,"range":{"start_line":27,"start_character":15,"end_line":27,"end_character":31},"updated":"2016-08-03 20:14:09.000000000","message":"needs a default? you removed both required, and default","commit_id":"9f71d860aa6d9c88badc8fe6e91854d08db37493"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"nexenta_connection_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027nexenta_host\u0027,"},{"line_number":27,"context_line":"               required\u003dTrue,"},{"line_number":28,"context_line":"               help\u003d\u0027IP address of Nexenta SA.\u0027),"},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"},{"line_number":30,"context_line":"               default\u003d8457,"},{"line_number":31,"context_line":"               help\u003d\u0027Rest port to connect to Nexenta REST API server.\u0027),"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_09dc6911","line":28,"range":{"start_line":28,"start_character":43,"end_line":28,"end_character":45},"updated":"2016-08-08 21:02:39.000000000","message":"What is SA?  Storage appliance?  I think you should spell this out.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"               help\u003d\u0027IP address of Nexenta SA.\u0027),"},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027nexenta_rest_port\u0027,"},{"line_number":30,"context_line":"               default\u003d8457,"},{"line_number":31,"context_line":"               help\u003d\u0027Rest port to connect to Nexenta REST API server.\u0027),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027nexenta_retry_count\u0027,"},{"line_number":33,"context_line":"               default\u003d6,"},{"line_number":34,"context_line":"               help\u003d\u0027Number of retries for unsuccessful API calls.\u0027),"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_29304d56","line":31,"range":{"start_line":31,"start_character":21,"end_line":31,"end_character":25},"updated":"2016-08-08 21:02:39.000000000","message":"Redundant (and inconsistent).\n\ns/Rest port/Port/","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"               default\u003d\u0027admin\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027User name to connect to Nexenta SA.\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027nexenta_password\u0027,"},{"line_number":43,"context_line":"               default\u003d\u0027nexenta\u0027,"},{"line_number":44,"context_line":"               help\u003d\u0027Password to connect to Nexenta SA.\u0027,"},{"line_number":45,"context_line":"               secret\u003dTrue),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_895a1982","line":43,"range":{"start_line":43,"start_character":15,"end_line":43,"end_character":33},"updated":"2016-08-08 21:02:39.000000000","message":"You seriously have a default password?  How is that a good idea?","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027on if share over NFS is enabled.\u0027)"},{"line_number":55,"context_line":"]"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_09e629b4","line":53,"range":{"start_line":53,"start_character":23,"end_line":53,"end_character":27},"updated":"2016-08-08 21:02:39.000000000","message":"Why isn\u0027t this a BoolOpt?","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027nexenta_nfs\u0027,"},{"line_number":53,"context_line":"               default\u003d\u0027on\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027on if share over NFS is enabled.\u0027)"},{"line_number":55,"context_line":"]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"nexenta_nfs_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_099469e0","line":54,"range":{"start_line":54,"start_character":54,"end_line":54,"end_character":55},"updated":"2016-08-08 21:02:39.000000000","message":"Trailing comma.\n\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               secret\u003dTrue),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"},{"line_number":45,"context_line":"               default\u003d\u0027volume1\u0027,"},{"line_number":46,"context_line":"               help\u003d\u0027volume name on NexentaStor.\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":48,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":49,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_c2aa45d4","line":46,"range":{"start_line":46,"start_character":21,"end_line":46,"end_character":22},"updated":"2016-08-26 17:17:27.000000000","message":"Caps.  Same below.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               secret\u003dTrue),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027nexenta_volume\u0027,"},{"line_number":45,"context_line":"               default\u003d\u0027volume1\u0027,"},{"line_number":46,"context_line":"               help\u003d\u0027volume name on NexentaStor.\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":48,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":49,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_6914f943","line":46,"range":{"start_line":46,"start_character":21,"end_line":46,"end_character":22},"in_reply_to":"fa7ab95a_c2aa45d4","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":48,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":49,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"},{"line_number":50,"context_line":"    cfg.BoolOpt(\u0027nexenta_nfs\u0027,"},{"line_number":51,"context_line":"                default\u003dTrue,"},{"line_number":52,"context_line":"                help\u003d\u0027on if share over NFS is enabled.\u0027),"},{"line_number":53,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_c2cfa5ae","line":50,"range":{"start_line":50,"start_character":17,"end_line":50,"end_character":28},"updated":"2016-08-26 17:17:27.000000000","message":"What does this do?  You set self.nfs from this value in ns4/nexenta_helper.py, and then you never use it.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    cfg.StrOpt(\u0027nexenta_pool\u0027,"},{"line_number":48,"context_line":"               default\u003d\u0027pool1\u0027,"},{"line_number":49,"context_line":"               help\u003d\u0027pool name on NexentaStor.\u0027),"},{"line_number":50,"context_line":"    cfg.BoolOpt(\u0027nexenta_nfs\u0027,"},{"line_number":51,"context_line":"                default\u003dTrue,"},{"line_number":52,"context_line":"                help\u003d\u0027on if share over NFS is enabled.\u0027),"},{"line_number":53,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_a91e0161","line":50,"range":{"start_line":50,"start_character":17,"end_line":50,"end_character":28},"in_reply_to":"fa7ab95a_c2cfa5ae","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"}],"manila/share/drivers/nexenta/utils.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\r"},{"line_number":18,"context_line":"from oslo_utils import units\r"},{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"def str2size(s, scale\u003d1024):\r"},{"line_number":22,"context_line":"    \"\"\"Convert size-string.\r"},{"line_number":23,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_a273be14","line":20,"updated":"2016-05-12 14:00:07.000000000","message":"It is not related directly to proposed driver. So, it could be moved to common utils module. BUT, there is already such one, see https://github.com/openstack/manila/blob/5dfbef4f/manila/utils.py#L620\n\nAny reason you cannot reuse it?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0f6cf62860125c16d508bb2f341720f896ea3ec4","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\r"},{"line_number":18,"context_line":"from oslo_utils import units\r"},{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"def str2size(s, scale\u003d1024):\r"},{"line_number":22,"context_line":"    \"\"\"Convert size-string.\r"},{"line_number":23,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_1bafb17d","line":20,"in_reply_to":"bab6814e_cfb9877b","updated":"2016-05-23 16:38:00.000000000","message":"\u00271\u0027 means \u00271 byte\u0027 and then you request to translate it to MegaBytes.\n\nIf your backend always reports only bytes, then it is not \"human-readable type\" as expected by this func.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\r"},{"line_number":18,"context_line":"from oslo_utils import units\r"},{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"def str2size(s, scale\u003d1024):\r"},{"line_number":22,"context_line":"    \"\"\"Convert size-string.\r"},{"line_number":23,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_cfb9877b","line":20,"in_reply_to":"dab17558_a273be14","updated":"2016-05-19 16:38:29.000000000","message":"I don\u0027t quite understand how should one use this method?\nWhy is there division but not multiplying here?\nhttps://github.com/openstack/manila/blob/5dfbef4f/manila/utils.py#L650-L651\n\nIf I pass (\u00271\u0027, \u0027M\u0027) to this method, it will return 9.53674316406e-07 while I was expecting something like 1024.0","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if not s:\r"},{"line_number":30,"context_line":"        return 0\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"    if isinstance(s, (int, long)):\r"},{"line_number":33,"context_line":"        return s\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"    match \u003d re.match(r\u0027^([\\.\\d]+)\\s*([BbKkMmGgTtPpEeZzYy]?)\u0027, s)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_1f482587","line":32,"range":{"start_line":32,"start_character":21,"end_line":32,"end_character":32},"updated":"2016-05-12 14:00:07.000000000","message":"https://pythonhosted.org/six/#six.integer_types\n\nRunning your driver on py3 you will get NameError exception on \"long\".","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if not s:\r"},{"line_number":30,"context_line":"        return 0\r"},{"line_number":31,"context_line":"\r"},{"line_number":32,"context_line":"    if isinstance(s, (int, long)):\r"},{"line_number":33,"context_line":"        return s\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"    match \u003d re.match(r\u0027^([\\.\\d]+)\\s*([BbKkMmGgTtPpEeZzYy]?)\u0027, s)\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_6e64cc21","line":32,"range":{"start_line":32,"start_character":21,"end_line":32,"end_character":32},"in_reply_to":"dab17558_1f482587","updated":"2016-05-19 16:38:29.000000000","message":"good catch, I wonder how it passed gate py34 test though","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    for i, t in enumerate(types):\r"},{"line_number":45,"context_line":"        if suffix \u003d\u003d t:\r"},{"line_number":46,"context_line":"            n \u003d value * pow(scale, i)\r"},{"line_number":47,"context_line":"            print(n)\r"},{"line_number":48,"context_line":"            p \u003d int(value * pow(scale, i))\r"},{"line_number":49,"context_line":"            print(p)\r"},{"line_number":50,"context_line":"            return int(value * pow(scale, i))\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_82403a37","line":47,"range":{"start_line":47,"start_character":12,"end_line":47,"end_character":20},"updated":"2016-05-12 14:00:07.000000000","message":"Print? Should be removed, or, if really needed, replaced with logging. Same below.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    for i, t in enumerate(types):\r"},{"line_number":45,"context_line":"        if suffix \u003d\u003d t:\r"},{"line_number":46,"context_line":"            n \u003d value * pow(scale, i)\r"},{"line_number":47,"context_line":"            print(n)\r"},{"line_number":48,"context_line":"            p \u003d int(value * pow(scale, i))\r"},{"line_number":49,"context_line":"            print(p)\r"},{"line_number":50,"context_line":"            return int(value * pow(scale, i))\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_ee78bcc6","line":47,"range":{"start_line":47,"start_character":12,"end_line":47,"end_character":20},"in_reply_to":"dab17558_82403a37","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            print(n)\r"},{"line_number":48,"context_line":"            p \u003d int(value * pow(scale, i))\r"},{"line_number":49,"context_line":"            print(p)\r"},{"line_number":50,"context_line":"            return int(value * pow(scale, i))\r"},{"line_number":51,"context_line":"\r"},{"line_number":52,"context_line":"\r"},{"line_number":53,"context_line":"def str2gib_size(s):\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_2286ae13","line":50,"range":{"start_line":50,"start_character":19,"end_line":50,"end_character":45},"updated":"2016-05-12 14:00:07.000000000","message":"Should be float.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            print(n)\r"},{"line_number":48,"context_line":"            p \u003d int(value * pow(scale, i))\r"},{"line_number":49,"context_line":"            print(p)\r"},{"line_number":50,"context_line":"            return int(value * pow(scale, i))\r"},{"line_number":51,"context_line":"\r"},{"line_number":52,"context_line":"\r"},{"line_number":53,"context_line":"def str2gib_size(s):\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_ce7338e6","line":50,"range":{"start_line":50,"start_character":19,"end_line":50,"end_character":45},"in_reply_to":"dab17558_2286ae13","updated":"2016-05-19 16:38:29.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"def str2gib_size(s):\r"},{"line_number":54,"context_line":"    \"\"\"Covert size-string to size in gigabytes.\"\"\"\r"},{"line_number":55,"context_line":"    size_in_bytes \u003d str2size(s)\r"},{"line_number":56,"context_line":"    return size_in_bytes // units.Gi\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_823e7a27","line":56,"range":{"start_line":56,"start_character":25,"end_line":56,"end_character":27},"updated":"2016-05-12 14:00:07.000000000","message":"Why floor division?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"adb004d71939cfa0e3e7dcd4f5be5dd09a26d639","unresolved":false,"context_lines":[{"line_number":53,"context_line":"def str2gib_size(s):\r"},{"line_number":54,"context_line":"    \"\"\"Covert size-string to size in gigabytes.\"\"\"\r"},{"line_number":55,"context_line":"    size_in_bytes \u003d str2size(s)\r"},{"line_number":56,"context_line":"    return size_in_bytes // units.Gi\r"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_819d815b","line":56,"range":{"start_line":56,"start_character":25,"end_line":56,"end_character":27},"in_reply_to":"dab17558_823e7a27","updated":"2016-05-19 16:38:29.000000000","message":"considering we use this value to provide total and free space and share size is a multiplier of 1GB that seems right to me (just less unnecessary digits in log), you think we need exact amount?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    groups \u003d match.groups()\r"},{"line_number":40,"context_line":"    value \u003d float(groups[0])\r"},{"line_number":41,"context_line":"    suffix \u003d len(groups) \u003e 1 and groups[1].upper() or \u0027B\u0027\r"},{"line_number":42,"context_line":"    types \u003d [\u0027B\u0027, \u0027K\u0027, \u0027M\u0027, \u0027G\u0027, \u0027T\u0027, \u0027P\u0027, \u0027E\u0027, \u0027Z\u0027, \u0027Y\u0027]\r"},{"line_number":43,"context_line":"    for i, t in enumerate(types):\r"},{"line_number":44,"context_line":"        if suffix \u003d\u003d t:\r"},{"line_number":45,"context_line":"            return float(value * pow(scale, i))\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_4a35a8d8","line":42,"range":{"start_line":42,"start_character":12,"end_line":42,"end_character":57},"updated":"2016-07-04 14:49:23.000000000","message":"If you need data container only for iteration, than it is recommended to use \"tuple\". As it is 10 times faster than \"list\".","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    groups \u003d match.groups()\r"},{"line_number":40,"context_line":"    value \u003d float(groups[0])\r"},{"line_number":41,"context_line":"    suffix \u003d len(groups) \u003e 1 and groups[1].upper() or \u0027B\u0027\r"},{"line_number":42,"context_line":"    types \u003d [\u0027B\u0027, \u0027K\u0027, \u0027M\u0027, \u0027G\u0027, \u0027T\u0027, \u0027P\u0027, \u0027E\u0027, \u0027Z\u0027, \u0027Y\u0027]\r"},{"line_number":43,"context_line":"    for i, t in enumerate(types):\r"},{"line_number":44,"context_line":"        if suffix \u003d\u003d t:\r"},{"line_number":45,"context_line":"            return float(value * pow(scale, i))\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_08333a63","line":42,"range":{"start_line":42,"start_character":12,"end_line":42,"end_character":57},"in_reply_to":"1aa78d24_4a35a8d8","updated":"2016-07-06 15:22:57.000000000","message":"Done","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"def bytes_to_gb(size):\r"},{"line_number":55,"context_line":"    return int(size) / (1024 * 1024 * 1024)\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_160d8c3e","line":55,"range":{"start_line":55,"start_character":24,"end_line":55,"end_character":42},"updated":"2016-07-04 14:49:23.000000000","message":"It is the same as \"units.Gi\" you use above. Please, be consistent.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"6295b57b2f57d78714a222ffa6a96e979009fb6a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"\r"},{"line_number":53,"context_line":"\r"},{"line_number":54,"context_line":"def bytes_to_gb(size):\r"},{"line_number":55,"context_line":"    return int(size) / (1024 * 1024 * 1024)\r"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_88472abb","line":55,"range":{"start_line":55,"start_character":24,"end_line":55,"end_character":42},"in_reply_to":"1aa78d24_160d8c3e","updated":"2016-07-06 15:22:57.000000000","message":"Done","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a69c4024243e6a17d1fc52a2efdce03b9d597be4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"    match \u003d re.match(r\u0027^([\\.\\d]+)\\s*([BbKkMmGgTtPpEeZzYy]?)\u0027, s)\r"},{"line_number":36,"context_line":"    if match is None:\r"},{"line_number":37,"context_line":"        raise ValueError(\u0027Invalid value: %s\u0027 % s)\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"    groups \u003d match.groups()\r"},{"line_number":40,"context_line":"    value \u003d float(groups[0])\r"}],"source_content_type":"text/x-python","patch_set":23,"id":"1aa78d24_1145f541","line":37,"updated":"2016-07-13 05:39:20.000000000","message":"Need _","commit_id":"0fe0446e9dc68dbf8306939f96bd4eae322d51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ea21ce6199521ccea6c849bd29bf435a73b6bdf8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_utils import units\r"},{"line_number":20,"context_line":"\r"},{"line_number":21,"context_line":"\r"},{"line_number":22,"context_line":"def str2size(s, scale\u003d1024):\r"},{"line_number":23,"context_line":"    \"\"\"Convert size-string.\r"},{"line_number":24,"context_line":"\r"},{"line_number":25,"context_line":"    String format: \u003cvalue\u003e[:space:]\u003cB | K | M | ...\u003e to bytes.\r"},{"line_number":26,"context_line":"\r"},{"line_number":27,"context_line":"    :param s: size-string\r"},{"line_number":28,"context_line":"    :param scale: base size\r"},{"line_number":29,"context_line":"    \"\"\"\r"},{"line_number":30,"context_line":"    if not s:\r"},{"line_number":31,"context_line":"        return 0\r"},{"line_number":32,"context_line":"    if isinstance(s, six.integer_types):\r"},{"line_number":33,"context_line":"        return s\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"    match \u003d re.match(r\u0027^([\\.\\d]+)\\s*([BbKkMmGgTtPpEeZzYy]?)\u0027, s)\r"},{"line_number":36,"context_line":"    if match is None:\r"},{"line_number":37,"context_line":"        raise ValueError(\u0027Invalid value: %s\u0027 % s)\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"    groups \u003d match.groups()\r"},{"line_number":40,"context_line":"    value \u003d float(groups[0])\r"},{"line_number":41,"context_line":"    suffix \u003d len(groups) \u003e 1 and groups[1].upper() or \u0027B\u0027\r"},{"line_number":42,"context_line":"    types \u003d (\u0027B\u0027, \u0027K\u0027, \u0027M\u0027, \u0027G\u0027, \u0027T\u0027, \u0027P\u0027, \u0027E\u0027, \u0027Z\u0027, \u0027Y\u0027)\r"},{"line_number":43,"context_line":"    for i, t in enumerate(types):\r"},{"line_number":44,"context_line":"        if suffix \u003d\u003d t:\r"},{"line_number":45,"context_line":"            return float(value * pow(scale, i))\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"\r"},{"line_number":48,"context_line":"def str2gib_size(s):\r"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_fd85cfce","line":45,"range":{"start_line":22,"start_character":0,"end_line":45,"end_character":47},"updated":"2016-07-31 01:48:43.000000000","message":"Please add unit tests for this method.","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0486f921d3bbad948c793f89932e9a9597195aab","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    if match is None:\r"},{"line_number":37,"context_line":"        raise ValueError(\u0027Invalid value: %s\u0027 % s)\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"    groups \u003d match.groups()\r"},{"line_number":40,"context_line":"    value \u003d float(groups[0])\r"},{"line_number":41,"context_line":"    suffix \u003d len(groups) \u003e 1 and groups[1].upper() or \u0027B\u0027\r"},{"line_number":42,"context_line":"    types \u003d (\u0027B\u0027, \u0027K\u0027, \u0027M\u0027, \u0027G\u0027, \u0027T\u0027, \u0027P\u0027, \u0027E\u0027, \u0027Z\u0027, \u0027Y\u0027)\r"},{"line_number":43,"context_line":"    for i, t in enumerate(types):\r"},{"line_number":44,"context_line":"        if suffix \u003d\u003d t:\r"},{"line_number":45,"context_line":"            return float(value * pow(scale, i))\r"},{"line_number":46,"context_line":"\r"},{"line_number":47,"context_line":"\r"},{"line_number":48,"context_line":"def str2gib_size(s):\r"}],"source_content_type":"text/x-python","patch_set":35,"id":"1ac06dbe_ba4bb558","line":45,"range":{"start_line":39,"start_character":3,"end_line":45,"end_character":47},"updated":"2016-08-25 08:42:37.000000000","message":"Please cover the unit test.\nhttp://logs.openstack.org/86/309286/35/check/manila-coverage-db-ubuntu-xenial/ff3061e/cover/manila_share_drivers_nexenta_utils_py.html","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"}],"manila/tests/share/drivers/nexenta/ns4/test_jsonrpc.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1220e00defa187bafd07fb6b0fa8656dd2f1fe50","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import requests"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from manila import exception"},{"line_number":21,"context_line":"from manila.share.drivers.nexenta.ns4.jsonrpc import NexentaJSONProxy"},{"line_number":22,"context_line":"from manila import test"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"fa7ab95a_4f548453","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":69},"updated":"2016-09-01 06:26:07.000000000","message":"Don\u0027t import objects/classes, import modules.. \n http://docs.openstack.org/developer/hacking/#imports","commit_id":"d66c03d7811af8337ff71e8082bd2504dad4e402"}],"manila/tests/share/drivers/nexenta/ns4/test_nexenta_nas.py":[{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            (\u0027%s:%s\u0027 % (self.user, self.password)).encode(\u0027utf-8\u0027))"},{"line_number":61,"context_line":"        headers \u003d {"},{"line_number":62,"context_line":"            \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":63,"context_line":"            \u0027Authorization\u0027: \u0027Basic %s\u0027 % auth"},{"line_number":64,"context_line":"        }"},{"line_number":65,"context_line":"        return headers"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_3dd95622","line":63,"range":{"start_line":63,"start_character":42,"end_line":63,"end_character":46},"updated":"2016-08-26 17:17:27.000000000","message":"Don\u0027t forget the trailing comma.  Same below.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"e21454826369312de66b3fad4ca2c51adad99363","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        post.return_value \u003d FakeResponse({\u0027result\u0027: {"},{"line_number":544,"context_line":"            \u0027available\u0027: 9 * units.Gi, \u0027used\u0027: 1 * units.Gi}})"},{"line_number":545,"context_line":"        self.assertEqual("},{"line_number":546,"context_line":"            (10, 9, 1), self.drv.helper._get_capacity_info(\u0027path\u0027))"},{"line_number":547,"context_line":""},{"line_number":548,"context_line":"    @patch(\u0027manila.share.drivers.nexenta.ns4.nexenta_helper.RestHelper.\u0027"},{"line_number":549,"context_line":"           \u0027_get_capacity_info\u0027)"}],"source_content_type":"text/x-python","patch_set":38,"id":"fa7ab95a_bac4895f","line":546,"range":{"start_line":546,"start_character":59,"end_line":546,"end_character":65},"updated":"2016-08-26 17:17:45.000000000","message":"This is causing the test to fail.","commit_id":"6d8d0becae80b2796b75a51ce0489e4a36ce893f"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"1220e00defa187bafd07fb6b0fa8656dd2f1fe50","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from manila import context"},{"line_number":25,"context_line":"from manila import exception"},{"line_number":26,"context_line":"from manila.share import configuration as conf"},{"line_number":27,"context_line":"from manila.share.drivers.nexenta.ns4.nexenta_nas import NexentaNasDriver"},{"line_number":28,"context_line":"from manila import test"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"PATH_TO_RPC \u003d \u0027requests.post\u0027"}],"source_content_type":"text/x-python","patch_set":43,"id":"fa7ab95a_8fe5aca9","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":73},"updated":"2016-09-01 06:26:07.000000000","message":"Don\u0027t import objects/classes, import modules.. \n http://docs.openstack.org/developer/hacking/#imports\n\nfrom manila.share.drivers.nexenta.ns4 import nexenta_nas","commit_id":"d66c03d7811af8337ff71e8082bd2504dad4e402"}],"manila/tests/share/drivers/nexenta/ns5/test_jsonrpc.py":[{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @patch(\u0027requests.Response.close\u0027)"},{"line_number":38,"context_line":"    @patch(\u0027requests.Session.get\u0027)"},{"line_number":39,"context_line":"    @patch(\u0027requests.Session.post\u0027)"},{"line_number":40,"context_line":"    def test_call(self, post, get, close, auth):"},{"line_number":41,"context_line":"        nef_get \u003d jsonrpc.NexentaJSONProxy("},{"line_number":42,"context_line":"            \u0027http\u0027, \u00271.1.1.1\u0027, \u00278080\u0027, \u0027user\u0027, \u0027pass\u0027, \u0027get\u0027)"},{"line_number":43,"context_line":"        nef_post \u003d jsonrpc.NexentaJSONProxy("}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_385324e3","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":17},"updated":"2016-08-26 17:17:27.000000000","message":"This method actually contains numerous tests.  Please use a combination of DDT and separate methods as appropriate to separate each test into a different method call.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @patch(\u0027requests.Response.close\u0027)"},{"line_number":38,"context_line":"    @patch(\u0027requests.Session.get\u0027)"},{"line_number":39,"context_line":"    @patch(\u0027requests.Session.post\u0027)"},{"line_number":40,"context_line":"    def test_call(self, post, get, close, auth):"},{"line_number":41,"context_line":"        nef_get \u003d jsonrpc.NexentaJSONProxy("},{"line_number":42,"context_line":"            \u0027http\u0027, \u00271.1.1.1\u0027, \u00278080\u0027, \u0027user\u0027, \u0027pass\u0027, \u0027get\u0027)"},{"line_number":43,"context_line":"        nef_post \u003d jsonrpc.NexentaJSONProxy("}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_9db0a2df","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":17},"updated":"2016-08-26 17:17:27.000000000","message":"This test is taking too long.  Please mock time.sleep.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @patch(\u0027requests.Response.close\u0027)"},{"line_number":38,"context_line":"    @patch(\u0027requests.Session.get\u0027)"},{"line_number":39,"context_line":"    @patch(\u0027requests.Session.post\u0027)"},{"line_number":40,"context_line":"    def test_call(self, post, get, close, auth):"},{"line_number":41,"context_line":"        nef_get \u003d jsonrpc.NexentaJSONProxy("},{"line_number":42,"context_line":"            \u0027http\u0027, \u00271.1.1.1\u0027, \u00278080\u0027, \u0027user\u0027, \u0027pass\u0027, \u0027get\u0027)"},{"line_number":43,"context_line":"        nef_post \u003d jsonrpc.NexentaJSONProxy("}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_3898e81b","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":17},"in_reply_to":"fa7ab95a_385324e3","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    @patch(\u0027requests.Response.close\u0027)"},{"line_number":38,"context_line":"    @patch(\u0027requests.Session.get\u0027)"},{"line_number":39,"context_line":"    @patch(\u0027requests.Session.post\u0027)"},{"line_number":40,"context_line":"    def test_call(self, post, get, close, auth):"},{"line_number":41,"context_line":"        nef_get \u003d jsonrpc.NexentaJSONProxy("},{"line_number":42,"context_line":"            \u0027http\u0027, \u00271.1.1.1\u0027, \u00278080\u0027, \u0027user\u0027, \u0027pass\u0027, \u0027get\u0027)"},{"line_number":43,"context_line":"        nef_post \u003d jsonrpc.NexentaJSONProxy("}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_789ef007","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":17},"in_reply_to":"fa7ab95a_9db0a2df","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"}],"manila/tests/share/drivers/nexenta/ns5/test_nexenta_nas.py":[{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"976c342e9ce01af2be3aa8e6a5b296d4a12c4e20","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"from mock import patch"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from manila import test"},{"line_number":20,"context_line":"from manila import context"},{"line_number":21,"context_line":"from manila.share import configuration as conf"},{"line_number":22,"context_line":"from manila.share.drivers.nexenta.ns5.nexenta_nas import NexentaNasDriver, PATH_DELIMITER"},{"line_number":23,"context_line":"from manila.share.drivers.nexenta.ns5 import jsonrpc"},{"line_number":24,"context_line":"from manila import exception"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"PATH_TO_RPC \u003d \u0027manila.share.drivers.nexenta.ns5.jsonrpc.NexentaJSONProxy\u0027"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_6f4b435a","line":24,"range":{"start_line":19,"start_character":0,"end_line":24,"end_character":28},"updated":"2016-04-22 10:43:10.000000000","message":"Please reorganize the imports.\n* keep the imports in alphabetical order\n* import NexentaNasDriver and PATH_DELIMITER on different lines\n* jsonrpc seems to be unused","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"976c342e9ce01af2be3aa8e6a5b296d4a12c4e20","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def test_create_share(self, m):"},{"line_number":68,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027, \u0027size\u0027: 1}"},{"line_number":69,"context_line":"        self.assertEqual(\u0027{}:/{}/{}/{}\u0027.format("},{"line_number":70,"context_line":"            self.cfg.nexenta_host, self.pool_name, self.fs_prefix, share[\u0027name\u0027]),"},{"line_number":71,"context_line":"            self.drv.create_share(self.ctx, share))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @patch(\u0027manila.share.drivers.nexenta.ns5.nexenta_nas.NexentaNasDriver._add_permission\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_af5d5bee","line":70,"updated":"2016-04-22 10:43:10.000000000","message":"Line is too long.\nThe same applies to all other lines below longer than 80 characters.","commit_id":"f0de66989980cea5e5969202efc3f6cc4420d8c0"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            return getattr(self.cfg, opt)"},{"line_number":35,"context_line":"        super(TestNexentaNasDriver, self).setUp()"},{"line_number":36,"context_line":"        self.ctx \u003d context.get_admin_context()"},{"line_number":37,"context_line":"        self.cfg \u003d mock.Mock(spec\u003dconf.Configuration)"},{"line_number":38,"context_line":"        self.cfg.safe_get \u003d mock.Mock(side_effect\u003d_safe_get)"},{"line_number":39,"context_line":"        self.cfg.nexenta_host \u003d \u00271.1.1.1\u0027"},{"line_number":40,"context_line":"        self.cfg.nexenta_rest_port \u003d 8080"},{"line_number":41,"context_line":"        self.cfg.nexenta_rest_protocol \u003d \u0027auto\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_c5f1ac97","line":38,"range":{"start_line":37,"start_character":8,"end_line":38,"end_character":60},"updated":"2016-05-12 14:00:07.000000000","message":"self.mock_object(...) method should been used.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027}"},{"line_number":234,"context_line":"        access \u003d {"},{"line_number":235,"context_line":"            \u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":236,"context_line":"            \u0027access_to\u0027: \u00271.1.1.1/24\u0027,"},{"line_number":237,"context_line":"            \u0027access_level\u0027: \u0027rw\u0027"},{"line_number":238,"context_line":"        }"},{"line_number":239,"context_line":"        url \u003d \u0027nas/nfs/\u0027 + PATH_DELIMITER.join("}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_6836d5e8","line":236,"range":{"start_line":236,"start_character":12,"end_line":236,"end_character":38},"updated":"2016-05-12 14:00:07.000000000","message":"Only CIDRs are supported? What about single IP address?","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"53c96dd047798ad493ae28343dac2a395097c6f9","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027}"},{"line_number":234,"context_line":"        access \u003d {"},{"line_number":235,"context_line":"            \u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":236,"context_line":"            \u0027access_to\u0027: \u00271.1.1.1/24\u0027,"},{"line_number":237,"context_line":"            \u0027access_level\u0027: \u0027rw\u0027"},{"line_number":238,"context_line":"        }"},{"line_number":239,"context_line":"        url \u003d \u0027nas/nfs/\u0027 + PATH_DELIMITER.join("}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_b8458b18","line":236,"range":{"start_line":236,"start_character":12,"end_line":236,"end_character":38},"in_reply_to":"dab17558_6836d5e8","updated":"2016-05-25 18:41:59.000000000","message":"test_update_access__ip in PS #10.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            url, {\u0027securityContexts\u0027: ["},{"line_number":245,"context_line":"                self.build_access_security_context(\u0027rw\u0027, \u00271.1.1.1\u0027, 24)]})"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":248,"context_line":"    def test_update_access__cidr_wrong_mask(self, m):"},{"line_number":249,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027}"},{"line_number":250,"context_line":"        access \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_65ac4036","line":247,"range":{"start_line":247,"start_character":4,"end_line":247,"end_character":23},"updated":"2016-05-12 14:00:07.000000000","message":"It is useful to make assertions on mocked stuff that it was called as expected.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"53c96dd047798ad493ae28343dac2a395097c6f9","unresolved":false,"context_lines":[{"line_number":244,"context_line":"            url, {\u0027securityContexts\u0027: ["},{"line_number":245,"context_line":"                self.build_access_security_context(\u0027rw\u0027, \u00271.1.1.1\u0027, 24)]})"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":248,"context_line":"    def test_update_access__cidr_wrong_mask(self, m):"},{"line_number":249,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027}"},{"line_number":250,"context_line":"        access \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_78f20371","line":247,"range":{"start_line":247,"start_character":4,"end_line":247,"end_character":23},"in_reply_to":"dab17558_65ac4036","updated":"2016-05-25 18:41:59.000000000","message":"In this case the call isn\u0027t actually made, since an exception is raised earlier. Forgot to remove the patch decorator.","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                          self.ctx, share, [access], None, None)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":260,"context_line":"    def test_update_access__one_ip_ro_add_rule_to_existing(self, m):"},{"line_number":261,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027}"},{"line_number":262,"context_line":"        access \u003d [{\u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":263,"context_line":"                   \u0027access_to\u0027: \u00275.5.5.5\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_45d01cca","line":260,"range":{"start_line":260,"start_character":65,"end_line":260,"end_character":66},"updated":"2016-05-12 14:00:07.000000000","message":"Please, be more specific, name it \"mock_rpc\".","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"53c96dd047798ad493ae28343dac2a395097c6f9","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                          self.ctx, share, [access], None, None)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":260,"context_line":"    def test_update_access__one_ip_ro_add_rule_to_existing(self, m):"},{"line_number":261,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027}"},{"line_number":262,"context_line":"        access \u003d [{\u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":263,"context_line":"                   \u0027access_to\u0027: \u00275.5.5.5\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_50023d0a","line":260,"range":{"start_line":260,"start_character":65,"end_line":260,"end_character":66},"in_reply_to":"dab17558_45d01cca","updated":"2016-05-25 18:41:59.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"ebe4bd6ae1bcf09d5192bf7b0c021a6157e9b5a0","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":260,"context_line":"    def test_update_access__one_ip_ro_add_rule_to_existing(self, m):"},{"line_number":261,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027}"},{"line_number":262,"context_line":"        access \u003d [{\u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":263,"context_line":"                   \u0027access_to\u0027: \u00275.5.5.5\u0027,"},{"line_number":264,"context_line":"                   \u0027access_level\u0027: \u0027ro\u0027},"},{"line_number":265,"context_line":"                  {\u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":266,"context_line":"                   \u0027access_to\u0027: \u00271.1.1.1/24\u0027,"},{"line_number":267,"context_line":"                   \u0027access_level\u0027: \u0027rw\u0027}]"},{"line_number":268,"context_line":"        url \u003d \u0027nas/nfs/\u0027 + PATH_DELIMITER.join("},{"line_number":269,"context_line":"            (self.pool_name, self.fs_prefix, share[\u0027name\u0027]))"},{"line_number":270,"context_line":"        sc \u003d self.build_access_security_context(\u0027rw\u0027, \u00271.1.1.1\u0027, 24)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_a573c814","line":267,"range":{"start_line":262,"start_character":8,"end_line":267,"end_character":41},"updated":"2016-05-12 14:00:07.000000000","message":"http://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"53c96dd047798ad493ae28343dac2a395097c6f9","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":260,"context_line":"    def test_update_access__one_ip_ro_add_rule_to_existing(self, m):"},{"line_number":261,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027}"},{"line_number":262,"context_line":"        access \u003d [{\u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":263,"context_line":"                   \u0027access_to\u0027: \u00275.5.5.5\u0027,"},{"line_number":264,"context_line":"                   \u0027access_level\u0027: \u0027ro\u0027},"},{"line_number":265,"context_line":"                  {\u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":266,"context_line":"                   \u0027access_to\u0027: \u00271.1.1.1/24\u0027,"},{"line_number":267,"context_line":"                   \u0027access_level\u0027: \u0027rw\u0027}]"},{"line_number":268,"context_line":"        url \u003d \u0027nas/nfs/\u0027 + PATH_DELIMITER.join("},{"line_number":269,"context_line":"            (self.pool_name, self.fs_prefix, share[\u0027name\u0027]))"},{"line_number":270,"context_line":"        sc \u003d self.build_access_security_context(\u0027rw\u0027, \u00271.1.1.1\u0027, 24)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_900ca53c","line":267,"range":{"start_line":262,"start_character":8,"end_line":267,"end_character":41},"in_reply_to":"dab17558_a573c814","updated":"2016-05-25 18:41:59.000000000","message":"Done","commit_id":"0431d8eee0af25ef13b017c12b1984897d690617"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"628b9c55b258048913e7dac05bd1e982fc45f663","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"PATH_TO_RPC \u003d \u0027manila.share.drivers.nexenta.ns5.jsonrpc.NexentaJSONProxy\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class TestNexentaNasDriver(test.TestCase):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_bb6825f6","line":29,"updated":"2016-05-23 16:37:42.000000000","message":"Most part of comments done in PS6 are not addressed.","commit_id":"ab2180bbc5b04aeba555c5bfd1e35755171dc98d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from manila import exception"},{"line_number":24,"context_line":"from manila.share import configuration as conf"},{"line_number":25,"context_line":"from manila.share.drivers.nexenta.ns5 import jsonrpc"},{"line_number":26,"context_line":"from manila.share.drivers.nexenta.ns5.nexenta_nas import NexentaNasDriver"},{"line_number":27,"context_line":"from manila.share.drivers.nexenta.ns5.nexenta_nas import PATH_DELIMITER"},{"line_number":28,"context_line":"from manila import test"},{"line_number":29,"context_line":"from oslo_utils import units"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_aa736cb0","line":27,"range":{"start_line":26,"start_character":0,"end_line":27,"end_character":71},"updated":"2016-07-04 14:49:23.000000000","message":"http://docs.openstack.org/developer/hacking/#imports","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from manila.share.drivers.nexenta.ns5.nexenta_nas import NexentaNasDriver"},{"line_number":27,"context_line":"from manila.share.drivers.nexenta.ns5.nexenta_nas import PATH_DELIMITER"},{"line_number":28,"context_line":"from manila import test"},{"line_number":29,"context_line":"from oslo_utils import units"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"PATH_TO_RPC \u003d \u0027manila.share.drivers.nexenta.ns5.jsonrpc.NexentaJSONProxy\u0027"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_3f97343b","line":29,"updated":"2016-07-06 21:38:26.000000000","message":"oslo import should be moved up.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def test_backend_name(self):"},{"line_number":70,"context_line":"        self.assertEqual(\u0027NexentaStor5\u0027, self.drv.backend_name)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":73,"context_line":"    def test_check_for_setup_error(self, mock_rpc):"},{"line_number":74,"context_line":"        self.drv.nef.get.return_value \u003d None"},{"line_number":75,"context_line":"        self.assertRaises(LookupError, self.drv.check_for_setup_error)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_8aa150ac","line":72,"range":{"start_line":72,"start_character":4,"end_line":72,"end_character":23},"updated":"2016-07-04 14:49:23.000000000","message":"It could be done using \"self.mock_class\" [1] in \"setUp\" method as following:\n\n\"\"\"\n\nself.mock_rpc \u003d self.mock_class(PATH_TO_RPC)\n\n\"\"\"\n\nSame is valid for all other such occurrences.\n\n[1] https://github.com/openstack/manila/blob/c8ff8035/manila/test.py#L201","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0e192a975b3e1b6cc20e31e900e01c5d5f74557e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            },"},{"line_number":92,"context_line":"            self.drv.create_share(self.ctx, share))"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @patch(\u0027manila.share.drivers.nexenta.ns5.nexenta_nas.NexentaNasDriver.\u0027"},{"line_number":95,"context_line":"           \u0027delete_share\u0027)"},{"line_number":96,"context_line":"    @patch(\u0027manila.share.drivers.nexenta.ns5.nexenta_nas.NexentaNasDriver.\u0027"},{"line_number":97,"context_line":"           \u0027_add_permission\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_ea929456","line":94,"range":{"start_line":94,"start_character":12,"end_line":94,"end_character":73},"updated":"2016-07-04 14:49:23.000000000","message":"Better to keep that str in some var and just call short var. Same is valid for all other such occurrences.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ea21ce6199521ccea6c849bd29bf435a73b6bdf8","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            url, {\u0027securityContexts\u0027: ["},{"line_number":258,"context_line":"                self.build_access_security_context(\u0027rw\u0027, \u00271.1.1.1\u0027)]})"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def test_update_access__cidr_wrong_mask(self):"},{"line_number":261,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027, \u0027size\u0027: 1}"},{"line_number":262,"context_line":"        access \u003d {"},{"line_number":263,"context_line":"            \u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":264,"context_line":"            \u0027access_to\u0027: \u00271.1.1.1/aa\u0027,"},{"line_number":265,"context_line":"            \u0027access_level\u0027: \u0027rw\u0027"},{"line_number":266,"context_line":"        }"},{"line_number":267,"context_line":"        self.assertRaises(exception.InvalidInput, self.drv.update_access,"},{"line_number":268,"context_line":"                          self.ctx, share, [access], None, None)"},{"line_number":269,"context_line":"        access \u003d {"},{"line_number":270,"context_line":"            \u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":271,"context_line":"            \u0027access_to\u0027: \u00271.1.1.1/aa\u0027,"},{"line_number":272,"context_line":"            \u0027access_level\u0027: \u0027ro\u0027"},{"line_number":273,"context_line":"        }"},{"line_number":274,"context_line":"        self.assertRaises(exception.InvalidInput, self.drv.update_access,"},{"line_number":275,"context_line":"                          self.ctx, share, [access], None, None)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def test_update_access__one_ip_ro_add_rule_to_existing(self):"},{"line_number":278,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027, \u0027size\u0027: 1}"}],"source_content_type":"text/x-python","patch_set":28,"id":"bacf61ea_3d3e4728","line":275,"range":{"start_line":260,"start_character":0,"end_line":275,"end_character":64},"updated":"2016-07-31 01:48:43.000000000","message":".  @ddt.data(\u0027rw\u0027, \u0027ro\u0027)\n   def test_update_access__cidr_wrong_mask(self, access_level):\n    \n        share \u003d {\u0027name\u0027: \u0027share\u0027, \u0027size\u0027: 1}\n        access \u003d {\n            \u0027access_type\u0027: \u0027ip\u0027,\n            \u0027access_to\u0027: \u00271.1.1.1/aa\u0027,\n            \u0027access_level\u0027: access_level,\n        }\n        self.assertRaises(exception.InvalidInput, self.drv.update_access,\n                          self.ctx, share, [access], None, None)","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"12ffb178369769f594f35ea8bcc3e6e565d50fe3","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        self.assertRaises(exception.InvalidInput, self.drv.update_access,"},{"line_number":270,"context_line":"                          self.ctx, share, [access], None, None)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    # def test_update_access__cidr_wrong_mask(self):"},{"line_number":273,"context_line":"    #     share \u003d {\u0027name\u0027: \u0027share\u0027, \u0027size\u0027: 1}"},{"line_number":274,"context_line":"    #     access \u003d {"},{"line_number":275,"context_line":"    #         \u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":276,"context_line":"    #         \u0027access_to\u0027: \u00271.1.1.1/aa\u0027,"},{"line_number":277,"context_line":"    #         \u0027access_level\u0027: \u0027rw\u0027"},{"line_number":278,"context_line":"    #     }"},{"line_number":279,"context_line":"    #     self.assertRaises(exception.InvalidInput, self.drv.update_access,"},{"line_number":280,"context_line":"    #                       self.ctx, share, [access], None, None)"},{"line_number":281,"context_line":"    #     access \u003d {"},{"line_number":282,"context_line":"    #         \u0027access_type\u0027: \u0027ip\u0027,"},{"line_number":283,"context_line":"    #         \u0027access_to\u0027: \u00271.1.1.1/aa\u0027,"},{"line_number":284,"context_line":"    #         \u0027access_level\u0027: \u0027ro\u0027"},{"line_number":285,"context_line":"    #     }"},{"line_number":286,"context_line":"    #     self.assertRaises(exception.InvalidInput, self.drv.update_access,"},{"line_number":287,"context_line":"    #                       self.ctx, share, [access], None, None)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_update_access__one_ip_ro_add_rule_to_existing(self):"},{"line_number":290,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027, \u0027size\u0027: 1}"}],"source_content_type":"text/x-python","patch_set":31,"id":"bacf61ea_1f358245","line":287,"range":{"start_line":272,"start_character":0,"end_line":287,"end_character":66},"updated":"2016-08-03 20:14:09.000000000","message":"please remove","commit_id":"9f71d860aa6d9c88badc8fe6e91854d08db37493"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ae591150bc57e778ae071f965e4a14eece170b4","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from manila import context"},{"line_number":24,"context_line":"from manila import exception"},{"line_number":25,"context_line":"from manila.share import configuration as conf"},{"line_number":26,"context_line":"from manila.share.driver import CONF"},{"line_number":27,"context_line":"from manila.share.drivers.nexenta.ns5 import jsonrpc"},{"line_number":28,"context_line":"from manila.share.drivers.nexenta.ns5 import nexenta_nas"},{"line_number":29,"context_line":"from manila import test"}],"source_content_type":"text/x-python","patch_set":32,"id":"bacf61ea_063dd6c3","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":36},"updated":"2016-08-05 14:19:53.000000000","message":"Why?","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ae591150bc57e778ae071f965e4a14eece170b4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def setUp(self):"},{"line_number":39,"context_line":"        def _safe_get(opt):"},{"line_number":40,"context_line":"            return getattr(self.cfg, opt)"},{"line_number":41,"context_line":"        self.mock_object(CONF, \u0027_check_required_opts\u0027)"},{"line_number":42,"context_line":"        self.cfg \u003d conf.Configuration(None)"},{"line_number":43,"context_line":"        self.cfg.nexenta_host \u003d \u00271.1.1.1\u0027"},{"line_number":44,"context_line":"        super(TestNexentaNasDriver, self).setUp()"}],"source_content_type":"text/x-python","patch_set":32,"id":"bacf61ea_066b16b8","line":41,"range":{"start_line":41,"start_character":8,"end_line":41,"end_character":54},"updated":"2016-08-05 14:19:53.000000000","message":"This mocks out the driver\u0027s CONF object.. \n\nWhat you want here is: \n\n  self.mock_object(nexenta_nas.CONF, \u0027_check_required_opts\u0027)","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    @patch(\u0027%s.get_provisioned_capacity\u0027 % DRV_PATH)"},{"line_number":76,"context_line":"    def test_check_for_setup_error(self, mock_provisioned):"},{"line_number":77,"context_line":"        self.drv.nef.get.return_value \u003d None"},{"line_number":78,"context_line":"        self.assertRaises(LookupError, self.drv.check_for_setup_error)"},{"line_number":79,"context_line":"        self.drv.nef.get.return_value \u003d {"},{"line_number":80,"context_line":"            \u0027data\u0027: [{\u0027filesystem\u0027: \u0027pool1/nfs_share\u0027, \u0027quotaSize\u0027: 1}]"},{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":"        self.assertIsNone(self.drv.check_for_setup_error())"},{"line_number":83,"context_line":"        self.drv.nef.get.return_value \u003d {"},{"line_number":84,"context_line":"            \u0027data\u0027: [{\u0027filesystem\u0027: \u0027asd\u0027, \u0027quotaSize\u0027: 1}]}"},{"line_number":85,"context_line":"        self.assertRaises(LookupError, self.drv.check_for_setup_error)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_get_provisioned_capacity(self):"},{"line_number":88,"context_line":"        self.drv.nef.get.return_value \u003d {"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_1707601d","line":85,"range":{"start_line":78,"start_character":0,"end_line":85,"end_character":70},"updated":"2016-08-08 21:02:39.000000000","message":"You\u0027re calling the method to be tested 3 times in one test.  This should be 3 separate tests.  Use DDT to minimize code duplication among similar tests.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.assertRaises(LookupError, self.drv.check_for_setup_error)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_get_provisioned_capacity(self):"},{"line_number":88,"context_line":"        self.drv.nef.get.return_value \u003d {"},{"line_number":89,"context_line":"            \u0027data\u0027: ["},{"line_number":90,"context_line":"                {\u0027path\u0027: \u0027pool1/nfs_share/123\u0027, \u0027quotaSize\u0027: 1 * units.Gi}]"},{"line_number":91,"context_line":"        }"},{"line_number":92,"context_line":"        self.drv.get_provisioned_capacity()"},{"line_number":93,"context_line":"        self.assertEqual(1, self.drv.provisioned_capacity)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def test_create_share(self):"},{"line_number":96,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027, \u0027size\u0027: 1}"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_d213165b","line":93,"range":{"start_line":88,"start_character":0,"end_line":93,"end_character":58},"updated":"2016-08-08 21:02:39.000000000","message":"Please separate unit tests into 3 sections (mocks, call, asserts).  This greatly enhances readability.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        quota \u003d new_size * units.Gi"},{"line_number":165,"context_line":"        data \u003d {"},{"line_number":166,"context_line":"            \u0027reservationSize\u0027: quota,"},{"line_number":167,"context_line":"            \u0027quotaSize\u0027: quota"},{"line_number":168,"context_line":"        }"},{"line_number":169,"context_line":"        url \u003d \u0027storage/pools/{}/filesystems/{}%2F{}\u0027.format("},{"line_number":170,"context_line":"            self.pool_name, self.fs_prefix, share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_d23af6cc","line":167,"range":{"start_line":167,"start_character":25,"end_line":167,"end_character":30},"updated":"2016-08-08 21:02:39.000000000","message":"Trailing comma, or unwrap.  Same elsewhere.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        self.assertEqual((10, 9, 1), self.drv._get_capacity_info(\u0027path\u0027))"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"class TestNexentaJSONProxy(test.TestCase):"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def __init__(self, method):"},{"line_number":347,"context_line":"        super(TestNexentaJSONProxy, self).__init__(method)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_3d79a394","line":344,"range":{"start_line":344,"start_character":6,"end_line":344,"end_character":26},"updated":"2016-08-08 21:02:39.000000000","message":"This class belongs in /manila/tests/share/drivers/nexenta/ns5/test_jsonrpc.py","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":350,"context_line":"    @patch(\u0027requests.Response.close\u0027)"},{"line_number":351,"context_line":"    @patch(\u0027requests.Session.get\u0027)"},{"line_number":352,"context_line":"    @patch(\u0027requests.Session.post\u0027)"},{"line_number":353,"context_line":"    def test_call(self, post, get, close, auth):"},{"line_number":354,"context_line":"        nef_get \u003d jsonrpc.NexentaJSONProxy("},{"line_number":355,"context_line":"            \u0027http\u0027, \u00271.1.1.1\u0027, \u00278080\u0027, \u0027user\u0027, \u0027pass\u0027, method\u003d\u0027get\u0027)"},{"line_number":356,"context_line":"        nef_post \u003d jsonrpc.NexentaJSONProxy("}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_528f2623","line":353,"range":{"start_line":353,"start_character":4,"end_line":353,"end_character":48},"updated":"2016-08-08 21:02:39.000000000","message":"Too many tests in this method.  Use DDT to provide initial conditions for a smaller number of test methods.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                    self.cfg.reserved_share_percentage),"},{"line_number":366,"context_line":"                \u0027thin_provisioning\u0027: self.cfg.nexenta_thin_provisioning,"},{"line_number":367,"context_line":"            }],"},{"line_number":368,"context_line":"        }"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        self.drv._update_share_stats()"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        self.assertEqual(stats, self.drv._stats)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def test_get_capacity_info(self):"},{"line_number":375,"context_line":"        self.drv.nef.get.return_value \u003d {"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_18f2e0d2","line":372,"range":{"start_line":368,"start_character":0,"end_line":372,"end_character":48},"updated":"2016-08-26 17:17:27.000000000","message":"This class has done a good job of using white space to separate unit tests into 3 sections (mocks, call, asserts) or 2 sections (mocks, assertRaises) for much better readability.  Please do the same in ns4/test_nexenta_nas.py and elsewhere.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                    self.cfg.reserved_share_percentage),"},{"line_number":366,"context_line":"                \u0027thin_provisioning\u0027: self.cfg.nexenta_thin_provisioning,"},{"line_number":367,"context_line":"            }],"},{"line_number":368,"context_line":"        }"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        self.drv._update_share_stats()"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        self.assertEqual(stats, self.drv._stats)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def test_get_capacity_info(self):"},{"line_number":375,"context_line":"        self.drv.nef.get.return_value \u003d {"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_d887fcb2","line":372,"range":{"start_line":368,"start_character":0,"end_line":372,"end_character":48},"in_reply_to":"fa7ab95a_18f2e0d2","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"}],"manila/tests/share/drivers/nexenta/test_nexenta_nas.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"628b9c55b258048913e7dac05bd1e982fc45f663","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":121,"context_line":"    def test_check_for_setup_error__volume_doesnt_exist(self, post):"},{"line_number":122,"context_line":"        post.return_value \u003d FakeResponse()"},{"line_number":123,"context_line":"        self.assertRaises("},{"line_number":124,"context_line":"            exception.NexentaException, self.drv.check_for_setup_error)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":127,"context_line":"    def test_check_for_setup_error__folder_doesnt_exist(self, post):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_1b43316d","line":124,"range":{"start_line":123,"start_character":8,"end_line":124,"end_character":71},"updated":"2016-05-23 16:37:42.000000000","message":"Exception message does not contain volume information because of improper provided args on its init.","commit_id":"ab2180bbc5b04aeba555c5bfd1e35755171dc98d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import base64"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"from mock import patch"},{"line_number":19,"context_line":"from mock import PropertyMock"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_df0a7089","line":16,"updated":"2016-07-06 21:38:26.000000000","message":"This should be in the first import group, followed by a blank line.\n\nhttp://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e96db7feb5859888369e91d7e0508a6edc9db9f2","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from manila.share import configuration as conf"},{"line_number":24,"context_line":"from manila.share.drivers.nexenta.nexenta_nas import NexentaNasDriver"},{"line_number":25,"context_line":"from manila import test"},{"line_number":26,"context_line":"from oslo_serialization import jsonutils"},{"line_number":27,"context_line":"from oslo_utils import units"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"PATH_TO_RPC \u003d \u0027requests.post\u0027"},{"line_number":30,"context_line":"CODE \u003d PropertyMock(return_value\u003d200)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_9fbf48a9","line":27,"range":{"start_line":26,"start_character":0,"end_line":27,"end_character":28},"updated":"2016-07-06 21:38:26.000000000","message":"oslo imports should be moved up to be in the same group as the mock import.","commit_id":"0279cf26647d0bc9410584af73e7039ab2fc55c9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Nexenta Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_b25b0254","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":1},"updated":"2016-08-08 21:02:39.000000000","message":"The unit test directories should mirror those of the code.  So this file should be in an \u0027ns4\u0027 subdirectory.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ae591150bc57e778ae071f965e4a14eece170b4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from manila import context"},{"line_number":26,"context_line":"from manila import exception"},{"line_number":27,"context_line":"from manila.share import configuration as conf"},{"line_number":28,"context_line":"from manila.share.driver import CONF"},{"line_number":29,"context_line":"from manila.share.drivers.nexenta.ns4.jsonrpc import NexentaJSONProxy"},{"line_number":30,"context_line":"from manila.share.drivers.nexenta.ns4.nexenta_nas import NexentaNasDriver"},{"line_number":31,"context_line":"from manila.share.drivers.nexenta.utils import str2size"}],"source_content_type":"text/x-python","patch_set":32,"id":"bacf61ea_66a012f5","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":36},"updated":"2016-08-05 14:19:53.000000000","message":"same","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ae591150bc57e778ae071f965e4a14eece170b4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from manila import exception"},{"line_number":27,"context_line":"from manila.share import configuration as conf"},{"line_number":28,"context_line":"from manila.share.driver import CONF"},{"line_number":29,"context_line":"from manila.share.drivers.nexenta.ns4.jsonrpc import NexentaJSONProxy"},{"line_number":30,"context_line":"from manila.share.drivers.nexenta.ns4.nexenta_nas import NexentaNasDriver"},{"line_number":31,"context_line":"from manila.share.drivers.nexenta.utils import str2size"},{"line_number":32,"context_line":"from manila import test"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"bacf61ea_26b3ba4e","line":30,"range":{"start_line":29,"start_character":0,"end_line":30,"end_character":73},"updated":"2016-08-05 14:19:53.000000000","message":"Don\u0027t import objects/classes, import modules.. \n\n http://docs.openstack.org/developer/hacking/#imports","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            (\u0027%s:%s\u0027 % (self.user, self.password)).encode(\u0027utf-8\u0027))"},{"line_number":65,"context_line":"        headers \u003d {"},{"line_number":66,"context_line":"            \u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":67,"context_line":"            \u0027Authorization\u0027: \u0027Basic %s\u0027 % auth"},{"line_number":68,"context_line":"        }"},{"line_number":69,"context_line":"        return headers"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_529566e2","line":67,"range":{"start_line":67,"start_character":42,"end_line":67,"end_character":46},"updated":"2016-08-08 21:02:39.000000000","message":"Trailing comma.  Same everywhere else.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8ae591150bc57e778ae071f965e4a14eece170b4","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        def _safe_get(opt):"},{"line_number":87,"context_line":"            return getattr(self.cfg, opt)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        self.mock_object(CONF, \u0027_check_required_opts\u0027)"},{"line_number":90,"context_line":"        self.cfg \u003d mock.Mock(spec\u003dconf.Configuration)"},{"line_number":91,"context_line":"        self.cfg.nexenta_host \u003d \u00271.1.1.1\u0027"},{"line_number":92,"context_line":"        super(TestNexentaNasDriver, self).setUp()"}],"source_content_type":"text/x-python","patch_set":32,"id":"bacf61ea_e6c1a281","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":54},"updated":"2016-08-05 14:19:53.000000000","message":"same here.. \n\n self.mock_object(nexenta_nas.CONF, \u0027_check_required_opts\u0027)","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    @patch(PATH_TO_RPC)"},{"line_number":186,"context_line":"    def test_create_share(self, post):"},{"line_number":187,"context_line":"        share \u003d {\u0027name\u0027: \u0027share\u0027, \u0027size\u0027: 1,"},{"line_number":188,"context_line":"                 \u0027share_proto\u0027: self.cfg.enabled_share_protocols}"},{"line_number":189,"context_line":"        post.return_value \u003d FakeResponse()"},{"line_number":190,"context_line":"        self.cfg.nexenta_thin_provisioning \u003d False"},{"line_number":191,"context_line":"        path \u003d \u0027%s/%s/%s\u0027 % (self.volume, self.share, share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_92febe69","line":188,"range":{"start_line":187,"start_character":16,"end_line":188,"end_character":65},"updated":"2016-08-08 21:02:39.000000000","message":"Improper wrapping.  Same below.","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        self.cfg.nexenta_thin_provisioning \u003d True"},{"line_number":216,"context_line":"        self.drv.create_share(self.ctx, share)"},{"line_number":217,"context_line":"        post.assert_called_with("},{"line_number":218,"context_line":"            self.request_params.url, data\u003dself.request_params.build_post_args("},{"line_number":219,"context_line":"                \u0027folder\u0027, \u0027create_with_props\u0027, parent_path, share[\u0027name\u0027],"},{"line_number":220,"context_line":"                create_folder_props),"},{"line_number":221,"context_line":"            headers\u003dself.request_params.headers)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    @patch(PATH_TO_RPC)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_f21d7abe","line":220,"range":{"start_line":218,"start_character":37,"end_line":220,"end_character":36},"updated":"2016-08-08 21:02:39.000000000","message":"It\u0027s best not to construct parameters inline.  Same elsewhere.\n\nhttp://docs.openstack.org/developer/hacking/#calling-methods","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        self.assertEqual(stats, self.drv._stats)"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    @patch(\u0027requests.post\u0027)"},{"line_number":526,"context_line":"    def test_call(self, post):"},{"line_number":527,"context_line":"        nms_post \u003d NexentaJSONProxy("},{"line_number":528,"context_line":"            \u0027http\u0027, \u00271.1.1.1\u0027, \u00278080\u0027, \u0027user\u0027, \u0027pass\u0027,"},{"line_number":529,"context_line":"            \u0027obj\u0027, auto\u003dFalse, method\u003d\u0027get\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_fde42b3c","line":526,"range":{"start_line":526,"start_character":8,"end_line":526,"end_character":17},"updated":"2016-08-08 21:02:39.000000000","message":"This method belongs in /manila/tests/share/drivers/nexenta/ns4/test_jsonrpc.py","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"6ca65e12f94f1ab3511864cafead0f2a8a70784b","unresolved":false,"context_lines":[{"line_number":534,"context_line":"            \u0027status_code\u0027: 500, \u0027_content\u0027: jsonutils.dumps(data)})"},{"line_number":535,"context_line":"        self.assertRaises(exception.NexentaException, nms_post)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"    def test_str2size(self):"},{"line_number":538,"context_line":"        values_to_test \u003d ("},{"line_number":539,"context_line":"            # Test empty value"},{"line_number":540,"context_line":"            (None, 0),"}],"source_content_type":"text/x-python","patch_set":32,"id":"9ad45d7e_bd10f34f","line":537,"range":{"start_line":537,"start_character":8,"end_line":537,"end_character":21},"updated":"2016-08-08 21:02:39.000000000","message":"This method belongs in /manila/tests/share/drivers/nexenta/test_utils.py","commit_id":"53f1f9b61d390c960ad2fb8011f960e80d525ed9"}],"manila/tests/share/drivers/nexenta/test_utils.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2d5304c3c99aa4b8d67332b993cf99c8adba5f84","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_utils import units"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from manila.share.drivers.nexenta.utils import str2size"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def test_str2size(self):"}],"source_content_type":"text/x-python","patch_set":35,"id":"1ac06dbe_8513fe5b","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":55},"updated":"2016-08-25 08:58:27.000000000","message":"Don\u0027t import objects/function, import modules.. \n http://docs.openstack.org/developer/hacking/#imports","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def test_str2size(self):"},{"line_number":22,"context_line":"    values_to_test \u003d ("},{"line_number":23,"context_line":"        # Test empty value"},{"line_number":24,"context_line":"        (None, 0),"},{"line_number":25,"context_line":"        (\u0027\u0027, 0),"},{"line_number":26,"context_line":"        (\u00270\u0027, 0),"},{"line_number":27,"context_line":"        (\u002712\u0027, 12),"},{"line_number":28,"context_line":"        # Test int values"},{"line_number":29,"context_line":"        (10, 10),"},{"line_number":30,"context_line":"        # Test bytes string"},{"line_number":31,"context_line":"        (\u00271b\u0027, 1),"},{"line_number":32,"context_line":"        (\u00271B\u0027, 1),"},{"line_number":33,"context_line":"        (\u00271023b\u0027, 1023),"},{"line_number":34,"context_line":"        (\u00270B\u0027, 0),"},{"line_number":35,"context_line":"        # Test other units"},{"line_number":36,"context_line":"        (\u00271M\u0027, units.Mi),"},{"line_number":37,"context_line":"        (\u00271.0M\u0027, units.Mi),"},{"line_number":38,"context_line":"    )"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    for value, result in values_to_test:"},{"line_number":41,"context_line":"        self.assertEqual(result, utils.str2size(value))"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_bdbba671","line":38,"range":{"start_line":22,"start_character":0,"end_line":38,"end_character":5},"updated":"2016-08-26 17:17:27.000000000","message":"Each of these is a separate positive test.  Please use DDT to stimulate a test method with different inputs instead of looping through the data inside the method.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def test_str2size(self):"},{"line_number":22,"context_line":"    values_to_test \u003d ("},{"line_number":23,"context_line":"        # Test empty value"},{"line_number":24,"context_line":"        (None, 0),"},{"line_number":25,"context_line":"        (\u0027\u0027, 0),"},{"line_number":26,"context_line":"        (\u00270\u0027, 0),"},{"line_number":27,"context_line":"        (\u002712\u0027, 12),"},{"line_number":28,"context_line":"        # Test int values"},{"line_number":29,"context_line":"        (10, 10),"},{"line_number":30,"context_line":"        # Test bytes string"},{"line_number":31,"context_line":"        (\u00271b\u0027, 1),"},{"line_number":32,"context_line":"        (\u00271B\u0027, 1),"},{"line_number":33,"context_line":"        (\u00271023b\u0027, 1023),"},{"line_number":34,"context_line":"        (\u00270B\u0027, 0),"},{"line_number":35,"context_line":"        # Test other units"},{"line_number":36,"context_line":"        (\u00271M\u0027, units.Mi),"},{"line_number":37,"context_line":"        (\u00271.0M\u0027, units.Mi),"},{"line_number":38,"context_line":"    )"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    for value, result in values_to_test:"},{"line_number":41,"context_line":"        self.assertEqual(result, utils.str2size(value))"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_d8ae1c2d","line":38,"range":{"start_line":22,"start_character":0,"end_line":38,"end_character":5},"in_reply_to":"fa7ab95a_bdbba671","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"309fc10a9f9d2b78e61352b8342190b0eaa4cb18","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertEqual(result, utils.str2size(value))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    # Invalid format value"},{"line_number":44,"context_line":"    self.assertRaises(ValueError, utils.str2size, \u0027A\u0027)"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_3da8761f","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":54},"updated":"2016-08-26 17:17:27.000000000","message":"This is a negative test unrelated to the preceding ones.  Please move to a separate method.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@ddn.com","username":"Alexey"},"change_message_id":"bb8d2af579cbe8ffed436ba116fc9d7c7a25a5f4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertEqual(result, utils.str2size(value))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    # Invalid format value"},{"line_number":44,"context_line":"    self.assertRaises(ValueError, utils.str2size, \u0027A\u0027)"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa7ab95a_18a5e445","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":54},"in_reply_to":"fa7ab95a_3da8761f","updated":"2016-08-30 13:44:03.000000000","message":"Done","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"}],"releasenotes/notes/nexenta-manila-drivers-cbd0b376a076ec50.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ea21ce6199521ccea6c849bd29bf435a73b6bdf8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - Added share backend drivers for NexentaStor4 and NexentaStor5 appliances"},{"line_number":3,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":28,"id":"bacf61ea_dd13abb6","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":8},"updated":"2016-07-31 01:48:43.000000000","message":"nit: Add the delimiter on top:\n\n---\n\nhttp://docs.openstack.org/developer/manila/devref/adding_release_notes.html","commit_id":"9b9cfe62bdc70e24c40d4b76060d0d8a1466db5b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"2d5304c3c99aa4b8d67332b993cf99c8adba5f84","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Added share backend drivers for NexentaStor4 and NexentaStor5 appliances"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":35,"id":"1ac06dbe_05742e9a","line":3,"range":{"start_line":3,"start_character":75,"end_line":3,"end_character":76},"updated":"2016-08-25 08:58:27.000000000","message":"trailing comma","commit_id":"64c71c66b4dd51ddea3e52dc4ae7ff87661d5795"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"89d802c8bab6b658ecacba5ed790817323b6a000","unresolved":false,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - Added share backend drivers for NexentaStor4 and NexentaStor5 appliances,"},{"line_number":3,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":36,"id":"fa7ab95a_5ebb91c4","line":2,"range":{"start_line":2,"start_character":76,"end_line":2,"end_character":77},"updated":"2016-08-26 09:57:15.000000000","message":"sorry, This should be trailing period.\n\nAnd please see inline comments in patch 35, thanks.","commit_id":"fe962e0cf1adb48b4c25d2ceb46c02b2bd5deabc"}],"tox.ini":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a2cb17a54c944a943fbd57c55875fcad6dfd7959","unresolved":false,"context_lines":[{"line_number":72,"context_line":"# NOTE(jaegerandi): This target does not use constraints because"},{"line_number":73,"context_line":"# upstream infra does not yet support it. Once that\u0027s fixed, we can"},{"line_number":74,"context_line":"# drop the install_command."},{"line_number":75,"context_line":"install_command \u003d pip install -U --force-reinstall {opts} {packages}"},{"line_number":76,"context_line":"commands \u003d {toxinidir}/tools/cover.sh {posargs}"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"[testenv:fast8]"}],"source_content_type":"text/x-properties","patch_set":27,"id":"dada55a8_6104ffc5","side":"PARENT","line":75,"updated":"2016-07-23 23:54:47.000000000","message":"Why do you include this in your driver patch?  Looks like a bad rebase.","commit_id":"46e825a2f43e096384c904c5683b176d1bf5be30"}]}
