)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77e4874bfde02d7f4b224791d65e8ce039c9ddad","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add MapR-FS native driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implement new manila driver for MapR-FS distributed file system"},{"line_number":10,"context_line":"Implements: blueprint maprfs-driver"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ba5201f7_bb426966","line":9,"updated":"2017-01-05 05:45:03.000000000","message":"Add a blank line between the description and the blueprint reference.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add MapR-FS native driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implement new manila driver for MapR-FS distributed file system"},{"line_number":10,"context_line":"Implements: blueprint maprfs-driver"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ba5201f7_e338bf3f","line":9,"in_reply_to":"ba5201f7_bb426966","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"}],"doc/source/devref/maprfs_native_driver.rst":[{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":60,"context_line":"------------"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"- Install  MapR core packages, version \u003e\u003d 5.1.x, on the storage backend"},{"line_number":63,"context_line":"- To enable snapshots, storage backend MapR cluster should have at least M5 licence"},{"line_number":64,"context_line":"- Establish network connection between the manila host and storage backend"},{"line_number":65,"context_line":"- Obtain \u0027ticket\u0027 for user that will be used to access MapR-FS"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bacf61ea_a01620ef","line":63,"range":{"start_line":63,"start_character":81,"end_line":63,"end_character":82},"updated":"2016-08-02 17:04:40.000000000","message":"s/c/s/","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":79,"context_line":"------------------"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"- Only \u0027Single MapR cluster per share-type\u0027 model is supported"},{"line_number":82,"context_line":"- This driver does not handle share servers, MapR cluster should already exist"},{"line_number":83,"context_line":"- This driver does not handle user authentication, no tickets or users are created"},{"line_number":84,"context_line":"  by this driver. This means, that when \u0027access_allow\u0027 or \u0027update_access\u0027 is calling"},{"line_number":85,"context_line":"  this will have no effect without providing tickets to users"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bacf61ea_e0a498ba","line":82,"range":{"start_line":82,"start_character":7,"end_line":82,"end_character":43},"updated":"2016-08-02 17:04:40.000000000","message":"How come this is a restriction?","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9882ab1609ec1049ba5a3afd08a6da3b1b7049c1","unresolved":false,"context_lines":[{"line_number":21,"context_line":"MapR-FS distributed file system designed to hold very large amounts of data,"},{"line_number":22,"context_line":" and provide high-throughput access to the data."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"A manila share in this driver is a volume in MaRFS. Instances"},{"line_number":25,"context_line":"talk directly to the MapRFS storage backend with \u0027MapRFS\u0027(mapr-posix) protocol."},{"line_number":26,"context_line":"To mount MapRFS volume mapr posix client is required. And access to each"},{"line_number":27,"context_line":"share is allowed by user/group based access type, which is aligned with MapRFS ACEs to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bacf61ea_7799fe78","line":24,"range":{"start_line":24,"start_character":45,"end_line":24,"end_character":50},"updated":"2016-08-05 06:01:42.000000000","message":"MapRFS","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"341fe95670f8bf40ebb1596f74acd5b8a43f5570","unresolved":false,"context_lines":[{"line_number":21,"context_line":"MapR-FS distributed file system designed to hold very large amounts of data,"},{"line_number":22,"context_line":" and provide high-throughput access to the data."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"A manila share in this driver is a volume in MaRFS. Instances"},{"line_number":25,"context_line":"talk directly to the MapRFS storage backend with \u0027MapRFS\u0027(mapr-posix) protocol."},{"line_number":26,"context_line":"To mount MapRFS volume mapr posix client is required. And access to each"},{"line_number":27,"context_line":"share is allowed by user/group based access type, which is aligned with MapRFS ACEs to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bacf61ea_e0cb4a70","line":24,"range":{"start_line":24,"start_character":45,"end_line":24,"end_character":50},"in_reply_to":"bacf61ea_7799fe78","updated":"2016-08-05 13:54:42.000000000","message":"Done","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a8f8c1ba9a7e436c529216a8759453eba0041793","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"      License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"      under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"MapRFS native driver"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_b55b4a85","line":15,"range":{"start_line":15,"start_character":24,"end_line":15,"end_character":24},"updated":"2016-08-05 16:09:20.000000000","message":"Please add maprfs_native_driver.rst in index.rst.\nShare backends\n--------------\n.. toctree::\n   :maxdepth: 3\n\n   zfs_on_linux_driver\n...\n   hdfs_native_driver\n   maprfs_native_driver\n\nlink: https://github.com/openstack/manila/blob/master/doc/source/devref/index.rst#share-backends","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"      License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"      under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"MapRFS native driver"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9ad45d7e_3216a0a7","line":15,"range":{"start_line":15,"start_character":24,"end_line":15,"end_character":24},"in_reply_to":"bacf61ea_b55b4a85","updated":"2016-08-10 07:15:15.000000000","message":"+1","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":12,"context_line":"      distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"      License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"      under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"MapRFS native driver"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9ad45d7e_a9ac3d36","line":15,"range":{"start_line":15,"start_character":24,"end_line":15,"end_character":24},"in_reply_to":"bacf61ea_b55b4a85","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"MapRFS native driver is a plugin based on the OpenStack manila service, which uses"},{"line_number":21,"context_line":"MapR-FS distributed file system designed to hold very large amounts of data,"},{"line_number":22,"context_line":" and provide high-throughput access to the data."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"A manila share in this driver is a volume in MapRFS. Instances"},{"line_number":25,"context_line":"talk directly to the MapRFS storage backend with \u0027MapRFS\u0027(mapr-posix) protocol."}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_8b3ecdb5","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":1},"updated":"2016-08-06 23:00:44.000000000","message":"extra space..","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"MapRFS native driver is a plugin based on the OpenStack manila service, which uses"},{"line_number":21,"context_line":"MapR-FS distributed file system designed to hold very large amounts of data,"},{"line_number":22,"context_line":" and provide high-throughput access to the data."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"A manila share in this driver is a volume in MapRFS. Instances"},{"line_number":25,"context_line":"talk directly to the MapRFS storage backend with \u0027MapRFS\u0027(mapr-posix) protocol."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9ad45d7e_09aaa919","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":1},"in_reply_to":"9ad45d7e_d26e242e","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"MapRFS native driver is a plugin based on the OpenStack manila service, which uses"},{"line_number":21,"context_line":"MapR-FS distributed file system designed to hold very large amounts of data,"},{"line_number":22,"context_line":" and provide high-throughput access to the data."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"A manila share in this driver is a volume in MapRFS. Instances"},{"line_number":25,"context_line":"talk directly to the MapRFS storage backend with \u0027MapRFS\u0027(mapr-posix) protocol."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9ad45d7e_d26e242e","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":1},"in_reply_to":"bacf61ea_8b3ecdb5","updated":"2016-08-10 07:15:15.000000000","message":"yep this causes some strange formatting:\nhttp://docs-draft.openstack.org/35/350035/5/check/gate-manila-docs-ubuntu-xenial/29ad2bd//doc/build/html/devref/maprfs_native_driver.html","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"Manila driver configuration"},{"line_number":68,"context_line":"---------------------------"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"- `share_driver` \u003d manila.share.drivers.hdfs.hdfs_native.MapRFSNativeShareDriver"},{"line_number":71,"context_line":"- `maprfs_cldb_ip` \u003d The list of IPs or hostnames of CLDB nodes"},{"line_number":72,"context_line":"- `maprfs_ssh_port` \u003d CLDB node SSH port"},{"line_number":73,"context_line":"- `maprfs_ssh_name` \u003d Cluster admin user ssh login name"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_4b6fb5c3","line":70,"range":{"start_line":70,"start_character":40,"end_line":70,"end_character":56},"updated":"2016-08-06 23:00:44.000000000","message":"maprfs.maprfs_native","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":67,"context_line":"Manila driver configuration"},{"line_number":68,"context_line":"---------------------------"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"- `share_driver` \u003d manila.share.drivers.hdfs.hdfs_native.MapRFSNativeShareDriver"},{"line_number":71,"context_line":"- `maprfs_cldb_ip` \u003d The list of IPs or hostnames of CLDB nodes"},{"line_number":72,"context_line":"- `maprfs_ssh_port` \u003d CLDB node SSH port"},{"line_number":73,"context_line":"- `maprfs_ssh_name` \u003d Cluster admin user ssh login name"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9ad45d7e_2967ad26","line":70,"range":{"start_line":70,"start_character":40,"end_line":70,"end_character":56},"in_reply_to":"bacf61ea_4b6fb5c3","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":72,"context_line":"- `maprfs_ssh_port` \u003d CLDB node SSH port"},{"line_number":73,"context_line":"- `maprfs_ssh_name` \u003d Cluster admin user ssh login name"},{"line_number":74,"context_line":"- `maprfs_ssh_pw` \u003d Cluster node SSH login password, this parameter is not necessary,"},{"line_number":75,"context_line":" if \u0027cldb_ssh_private_key\u0027 is configured"},{"line_number":76,"context_line":"- `maprfs_ssh_private_key` \u003d Path to private key to ssh login"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Known Restrictions"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9ad45d7e_52619438","line":75,"range":{"start_line":75,"start_character":1,"end_line":75,"end_character":40},"updated":"2016-08-10 07:15:15.000000000","message":"space missing.\nSee: http://docs-draft.openstack.org/35/350035/5/check/gate-manila-docs-ubuntu-xenial/29ad2bd//doc/build/html/devref/maprfs_native_driver.html","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":72,"context_line":"- `maprfs_ssh_port` \u003d CLDB node SSH port"},{"line_number":73,"context_line":"- `maprfs_ssh_name` \u003d Cluster admin user ssh login name"},{"line_number":74,"context_line":"- `maprfs_ssh_pw` \u003d Cluster node SSH login password, this parameter is not necessary,"},{"line_number":75,"context_line":" if \u0027cldb_ssh_private_key\u0027 is configured"},{"line_number":76,"context_line":"- `maprfs_ssh_private_key` \u003d Path to private key to ssh login"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Known Restrictions"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9ad45d7e_6971a5e0","line":75,"range":{"start_line":75,"start_character":1,"end_line":75,"end_character":40},"in_reply_to":"9ad45d7e_52619438","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  this will have no effect without providing tickets to users"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"The :mod:`manila.share.drivers.hdfs.hdfs_native` Module"},{"line_number":88,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. automodule:: manila.share.drivers.hdfs.hdfs_native"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_0ba01df3","line":87,"range":{"start_line":87,"start_character":31,"end_line":87,"end_character":55},"updated":"2016-08-06 23:00:44.000000000","message":"same","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  this will have no effect without providing tickets to users"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"The :mod:`manila.share.drivers.hdfs.hdfs_native` Module"},{"line_number":88,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. automodule:: manila.share.drivers.hdfs.hdfs_native"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9ad45d7e_a9739de6","line":87,"range":{"start_line":87,"start_character":31,"end_line":87,"end_character":55},"in_reply_to":"bacf61ea_0ba01df3","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"The :mod:`manila.share.drivers.hdfs.hdfs_native` Module"},{"line_number":88,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. automodule:: manila.share.drivers.hdfs.hdfs_native"},{"line_number":91,"context_line":"    :noindex:"},{"line_number":92,"context_line":"    :members:"},{"line_number":93,"context_line":"    :undoc-members:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"bacf61ea_6ba39900","line":90,"range":{"start_line":90,"start_character":37,"end_line":90,"end_character":53},"updated":"2016-08-06 23:00:44.000000000","message":"same","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":87,"context_line":"The :mod:`manila.share.drivers.hdfs.hdfs_native` Module"},{"line_number":88,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":".. automodule:: manila.share.drivers.hdfs.hdfs_native"},{"line_number":91,"context_line":"    :noindex:"},{"line_number":92,"context_line":"    :members:"},{"line_number":93,"context_line":"    :undoc-members:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9ad45d7e_e97d95b2","line":90,"range":{"start_line":90,"start_character":37,"end_line":90,"end_character":53},"in_reply_to":"bacf61ea_6ba39900","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":59,"context_line":"Requirements"},{"line_number":60,"context_line":"------------"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"- Install  MapR core packages, version \u003e\u003d 5.1.x, on the storage backend"},{"line_number":63,"context_line":"- To enable snapshots, storage backend MapR cluster should have at least M5 license"},{"line_number":64,"context_line":"- Establish network connection between the manila host and storage backend"},{"line_number":65,"context_line":"- Obtain \u0027ticket\u0027 for user that will be used to access MapR-FS"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3ac371cc_16d3ef39","line":62,"range":{"start_line":62,"start_character":9,"end_line":62,"end_character":11},"updated":"2016-08-16 08:08:06.000000000","message":"one space","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"cc1a04295e40c8ce148057f06f471cb8e330cac3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1a6eadb0_41470e77","updated":"2016-12-20 01:33:37.000000000","message":"There\u0027s been recent effort to purge all configuration documentation from the developer reference. Please propose a patch with this documentation to the OpenStack Manuals project, in the configuration reference. \n\nIt would be helpful to link us to the patch, either on review comments or within the commit message of this patch.","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"}],"manila/common/constants.py":[{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":87,"context_line":")"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"SUPPORTED_SHARE_PROTOCOLS \u003d ("},{"line_number":90,"context_line":"    \u0027NFS\u0027, \u0027CIFS\u0027, \u0027GLUSTERFS\u0027, \u0027HDFS\u0027, \u0027MAPRFS\u0027)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"SECURITY_SERVICES_ALLOWED_TYPES \u003d [\u0027active_directory\u0027, \u0027ldap\u0027, \u0027kerberos\u0027]"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_60c6e84a","line":90,"range":{"start_line":90,"start_character":41,"end_line":90,"end_character":45},"updated":"2016-08-02 17:04:40.000000000","message":"Does your change remove CephFS support?","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"}],"manila/exception.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":695,"context_line":""},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"class MapRFSException(ManilaException):"},{"line_number":698,"context_line":"    message \u003d _(\"MapRFS exception occurred!\")"},{"line_number":699,"context_line":""},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"class ZFSonLinuxException(ManilaException):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_cbb28548","line":698,"range":{"start_line":698,"start_character":42,"end_line":698,"end_character":43},"updated":"2016-08-06 23:00:44.000000000","message":"provide a way to shove the exception str in this:\n\n \"MapRFS exception occurred: %(msg)s\"","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":695,"context_line":""},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"class MapRFSException(ManilaException):"},{"line_number":698,"context_line":"    message \u003d _(\"MapRFS exception occurred!\")"},{"line_number":699,"context_line":""},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"class ZFSonLinuxException(ManilaException):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_77164a56","line":698,"range":{"start_line":698,"start_character":42,"end_line":698,"end_character":43},"in_reply_to":"bacf61ea_cbb28548","updated":"2016-08-10 07:15:15.000000000","message":"+1","commit_id":"f2face12f666cf9db9af729363657929395115b1"}],"manila/share/drivers/maprfs/driver_util.py":[{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import json"},{"line_number":2,"context_line":"import pipes"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from oslo_concurrency import processutils"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_033616b4","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":11},"updated":"2016-08-02 17:04:40.000000000","message":"Header license is missing, please add it.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        for x in range(0, len(self.hosts)):"},{"line_number":32,"context_line":"            try:"},{"line_number":33,"context_line":"                check_exit_code \u003d kwargs.pop(\u0027check_exit_code\u0027, False)"},{"line_number":34,"context_line":"                __ \u003d self._run_ssh(self.hosts[x], cmd, check_exit_code)"},{"line_number":35,"context_line":"                # move available cldb host to the beginning"},{"line_number":36,"context_line":"                if x \u003e 0:"},{"line_number":37,"context_line":"                    self.hosts[0], self.hosts[x] \u003d self.hosts[x], self.hosts[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_e04db89a","line":34,"range":{"start_line":34,"start_character":16,"end_line":34,"end_character":18},"updated":"2016-08-02 17:04:40.000000000","message":"Since you are using the results of this call __ does not look like a very descriptive variable name. Please, replace it with something less ambiguous.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def _run_ssh(self, host, cmd_list, check_exit_code\u003dFalse):"},{"line_number":47,"context_line":"        command \u003d \u0027 \u0027.join(pipes.quote(cmd_arg) for cmd_arg in cmd_list)"},{"line_number":48,"context_line":"        connection \u003d self.ssh_connections.get(host)"},{"line_number":49,"context_line":"        if not connection:"},{"line_number":50,"context_line":"            ssh_name \u003d self.configuration.maprfs_ssh_name"},{"line_number":51,"context_line":"            password \u003d self.configuration.maprfs_ssh_pw"},{"line_number":52,"context_line":"            private_key \u003d self.configuration.maprfs_ssh_private_key"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_633d52bb","line":49,"range":{"start_line":49,"start_character":11,"end_line":49,"end_character":25},"updated":"2016-08-02 17:04:40.000000000","message":"A nit: it is recommended to compare to None by \u0027is None\u0027.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"015f022ca6ae2363c61d29d5eddb133ecc7b916f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            LOG.error(msg)"},{"line_number":85,"context_line":"            raise exception.ProcessExecutionError(msg)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _as_root(self, cmd):"},{"line_number":88,"context_line":"        return [\u0027sudo\u0027] + cmd"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _as_user(self, cmd, user):"},{"line_number":91,"context_line":"        return [\"sudo\", \"su\", \"-\", \"-c\", \"\\\"%s\\\"\" % cmd, user]"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _add_params(self, cmd, **kwargs):"},{"line_number":94,"context_line":"        params \u003d []"},{"line_number":95,"context_line":"        for x in kwargs.keys():"},{"line_number":96,"context_line":"            params.append(\u0027-\u0027 + x)"},{"line_number":97,"context_line":"            params.append(kwargs[x])"},{"line_number":98,"context_line":"        return cmd + params"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def create_volume(self, name, path, size, **kwargs):"},{"line_number":101,"context_line":"        # delete size param as it is set separately"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_4af2c19b","line":98,"range":{"start_line":87,"start_character":4,"end_line":98,"end_character":27},"updated":"2016-08-03 11:32:57.000000000","message":"These three methods could be static.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":106,"context_line":"               name, \u0027-path\u0027, path, \u0027-quota\u0027,"},{"line_number":107,"context_line":"               sizestr, \u0027-readAce\u0027, \u0027\u0027, \u0027-writeAce\u0027, \u0027\u0027]"},{"line_number":108,"context_line":"        cmd \u003d self._add_params(cmd, **kwargs)"},{"line_number":109,"context_line":"        (out, __) \u003d self._execute(*cmd)"},{"line_number":110,"context_line":"        if \u0027ERROR\u0027 in out:"},{"line_number":111,"context_line":"            raise exception.ProcessExecutionError(out)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_e3b942cd","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":17},"updated":"2016-08-02 17:04:40.000000000","message":"A nit: you don\u0027t really need parentheses here. And in most other methods as well.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        sizestr \u003d six.text_type(size) + \u0027G\u0027"},{"line_number":127,"context_line":"        cmd \u003d [\u0027maprcli\u0027, \u0027volume\u0027, \u0027modify\u0027, \u0027-name\u0027, name, \u0027-quota\u0027, sizestr]"},{"line_number":128,"context_line":"        (out, __) \u003d self._execute(*cmd)"},{"line_number":129,"context_line":"        if \u0027ERROR\u0027 in out:"},{"line_number":130,"context_line":"            raise exception.ProcessExecutionError(out)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def create_snapshot(self, name, volume_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_ae1c516b","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":25},"updated":"2016-08-02 17:04:40.000000000","message":"Out of curiosity, why don\u0027t you check stderr?","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"015f022ca6ae2363c61d29d5eddb133ecc7b916f","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            raise exception.ProcessExecutionError(out)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def get_volume_info(self, volume_name, columns\u003dNone):"},{"line_number":148,"context_line":"        if columns:"},{"line_number":149,"context_line":"            cmd \u003d [\u0027maprcli\u0027, \u0027volume\u0027, \u0027info\u0027, \u0027-name\u0027, volume_name,"},{"line_number":150,"context_line":"                   \u0027-columns\u0027, \u0027,\u0027.join(columns), \u0027-json\u0027]"},{"line_number":151,"context_line":"        else:"},{"line_number":152,"context_line":"            cmd \u003d [\u0027maprcli\u0027, \u0027volume\u0027, \u0027info\u0027, \u0027-name\u0027, volume_name, \u0027-json\u0027]"},{"line_number":153,"context_line":"        (out, __) \u003d self._execute(*cmd)"},{"line_number":154,"context_line":"        if \u0027ERROR\u0027 in out:"},{"line_number":155,"context_line":"            raise exception.ProcessExecutionError(out)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_eaac5537","line":152,"range":{"start_line":148,"start_character":8,"end_line":152,"end_character":78},"updated":"2016-08-03 11:32:57.000000000","message":"I think you could write this as\n\n  cmd \u003d [\u0027maprcli\u0027, \u0027volume\u0027, \u0027info\u0027, \u0027-name\u0027, volume_name, \u0027-json\u0027]\n  if columns:\n    cmd +\u003d [\u0027-columns\u0027, \u0027,\u0027.join(columns)]","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"015f022ca6ae2363c61d29d5eddb133ecc7b916f","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        (out, __) \u003d self._execute(*cmd)"},{"line_number":161,"context_line":"        lines \u003d out.splitlines()"},{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            total \u003d int(lines[1].split()[1])"},{"line_number":164,"context_line":"            free \u003d int(lines[1].split()[3])"},{"line_number":165,"context_line":"        except (IndexError, ValueError) as e:"},{"line_number":166,"context_line":"            msg \u003d (_(\u0027Failed to get MapR-FS capacity info. \u0027"},{"line_number":167,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_251a1e6f","line":164,"range":{"start_line":163,"start_character":12,"end_line":164,"end_character":43},"updated":"2016-08-03 11:32:57.000000000","message":"You could prevent splitting twice with\n\n  fields \u003d lines[1].split()\n  total \u003d int(fields[1])\n  free \u003d int(fields[3])","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        write_ace \u003d str(aces[\u0027writeAce\u0027])"},{"line_number":256,"context_line":"        access_rules_map \u003d {}"},{"line_number":257,"context_line":"        if read_ace not in [\u0027p\u0027, \u0027\u0027]:"},{"line_number":258,"context_line":"            read_rules \u003d map(lambda x: str.strip(x), read_ace.split(\u0027|\u0027))"},{"line_number":259,"context_line":"            for user in read_rules:"},{"line_number":260,"context_line":"                rule_type, username \u003d user.split(\u0027:\u0027)"},{"line_number":261,"context_line":"                if rule_type not in [\u0027u\u0027, \u0027g\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_8e9b4d72","line":258,"range":{"start_line":258,"start_character":25,"end_line":258,"end_character":73},"updated":"2016-08-02 17:04:40.000000000","message":"A nit: [x.strip() for x in read_ace.split(\u0027|\u0027)]. You don\u0027t need a lambda here.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"015f022ca6ae2363c61d29d5eddb133ecc7b916f","unresolved":false,"context_lines":[{"line_number":260,"context_line":"                rule_type, username \u003d user.split(\u0027:\u0027)"},{"line_number":261,"context_line":"                if rule_type not in [\u0027u\u0027, \u0027g\u0027]:"},{"line_number":262,"context_line":"                    continue"},{"line_number":263,"context_line":"                access_rules_map[username] \u003d {}"},{"line_number":264,"context_line":"                access_rules_map[username][\u0027access_level\u0027] \u003d \u0027ro\u0027"},{"line_number":265,"context_line":"                access_rules_map[username][\u0027access_to\u0027] \u003d username"},{"line_number":266,"context_line":"                access_rules_map[username][\u0027access_type\u0027] \u003d \u0027user\u0027"},{"line_number":267,"context_line":"        if write_ace not in [\u0027p\u0027, \u0027\u0027]:"},{"line_number":268,"context_line":"            write_rules \u003d map(lambda x: str.strip(x), write_ace.split(\u0027|\u0027))"},{"line_number":269,"context_line":"            for user in write_rules:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_30037a11","line":266,"range":{"start_line":263,"start_character":16,"end_line":266,"end_character":66},"updated":"2016-08-03 11:32:57.000000000","message":"access_rules_map[username] \u003d {\n      \u0027access_level\u0027: \u0027ro\u0027\n      \u0027access_to\u0027: username\n      \u0027access_type\u0027: \u0027user\u0027\n  }\n\n(Same for the lines 273 - 276, but as Alexey suggested you could merge them into a helper method)","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                access_rules_map[username][\u0027access_to\u0027] \u003d username"},{"line_number":266,"context_line":"                access_rules_map[username][\u0027access_type\u0027] \u003d \u0027user\u0027"},{"line_number":267,"context_line":"        if write_ace not in [\u0027p\u0027, \u0027\u0027]:"},{"line_number":268,"context_line":"            write_rules \u003d map(lambda x: str.strip(x), write_ace.split(\u0027|\u0027))"},{"line_number":269,"context_line":"            for user in write_rules:"},{"line_number":270,"context_line":"                rule_type, username \u003d user.split(\u0027:\u0027)"},{"line_number":271,"context_line":"                if rule_type not in [\u0027u\u0027, \u0027g\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_ce92654b","line":268,"range":{"start_line":268,"start_character":26,"end_line":268,"end_character":75},"updated":"2016-08-02 17:04:40.000000000","message":"ditto","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                access_rules_map[username][\u0027access_level\u0027] \u003d \u0027ro\u0027"},{"line_number":265,"context_line":"                access_rules_map[username][\u0027access_to\u0027] \u003d username"},{"line_number":266,"context_line":"                access_rules_map[username][\u0027access_type\u0027] \u003d \u0027user\u0027"},{"line_number":267,"context_line":"        if write_ace not in [\u0027p\u0027, \u0027\u0027]:"},{"line_number":268,"context_line":"            write_rules \u003d map(lambda x: str.strip(x), write_ace.split(\u0027|\u0027))"},{"line_number":269,"context_line":"            for user in write_rules:"},{"line_number":270,"context_line":"                rule_type, username \u003d user.split(\u0027:\u0027)"},{"line_number":271,"context_line":"                if rule_type not in [\u0027u\u0027, \u0027g\u0027]:"},{"line_number":272,"context_line":"                    continue"},{"line_number":273,"context_line":"                access_rules_map[username] \u003d {}"},{"line_number":274,"context_line":"                access_rules_map[username][\u0027access_level\u0027] \u003d \u0027rw\u0027"},{"line_number":275,"context_line":"                access_rules_map[username][\u0027access_to\u0027] \u003d username"},{"line_number":276,"context_line":"                access_rules_map[username][\u0027access_type\u0027] \u003d \u0027user\u0027"},{"line_number":277,"context_line":"        return access_rules_map"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def user_exist(self, user):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_2efd016f","line":276,"range":{"start_line":267,"start_character":0,"end_line":276,"end_character":66},"updated":"2016-08-02 17:04:40.000000000","message":"This code looks like an almost verbatim copy of code on lines 257-266. I suggest separating it to a helper method or inner function.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9882ab1609ec1049ba5a3afd08a6da3b1b7049c1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            except Exception as e:"},{"line_number":53,"context_line":"                if x \u003c len(self.hosts) - 1:"},{"line_number":54,"context_line":"                    msg \u003d _(\u0027Error running SSH command. Trying another CLDB\u0027)"},{"line_number":55,"context_line":"                    LOG.error(msg)"},{"line_number":56,"context_line":"                else:"},{"line_number":57,"context_line":"                    raise exception.ProcessExecutionError(six.text_type(e))"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_896615b9","line":55,"range":{"start_line":55,"start_character":30,"end_line":55,"end_character":33},"updated":"2016-08-05 06:01:42.000000000","message":"error message should be wrapped by _LE.","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"341fe95670f8bf40ebb1596f74acd5b8a43f5570","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            except Exception as e:"},{"line_number":53,"context_line":"                if x \u003c len(self.hosts) - 1:"},{"line_number":54,"context_line":"                    msg \u003d _(\u0027Error running SSH command. Trying another CLDB\u0027)"},{"line_number":55,"context_line":"                    LOG.error(msg)"},{"line_number":56,"context_line":"                else:"},{"line_number":57,"context_line":"                    raise exception.ProcessExecutionError(six.text_type(e))"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_e0922a56","line":55,"range":{"start_line":55,"start_character":30,"end_line":55,"end_character":33},"in_reply_to":"bacf61ea_3be91db8","updated":"2016-08-05 13:54:42.000000000","message":"Done","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"df07bbe001768911ee917711967d7d57ebaaf2ba","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            except Exception as e:"},{"line_number":53,"context_line":"                if x \u003c len(self.hosts) - 1:"},{"line_number":54,"context_line":"                    msg \u003d _(\u0027Error running SSH command. Trying another CLDB\u0027)"},{"line_number":55,"context_line":"                    LOG.error(msg)"},{"line_number":56,"context_line":"                else:"},{"line_number":57,"context_line":"                    raise exception.ProcessExecutionError(six.text_type(e))"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_9b6929c1","line":55,"range":{"start_line":55,"start_character":30,"end_line":55,"end_character":33},"in_reply_to":"bacf61ea_896615b9","updated":"2016-08-05 11:10:24.000000000","message":"Should I do that every time when LOG.error is called? There is much more such calls in maprfs_native.py. But I don`t see that other drivers do that.","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"3aa11f55bbe29b48a382b8726595a17932307f35","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            except Exception as e:"},{"line_number":53,"context_line":"                if x \u003c len(self.hosts) - 1:"},{"line_number":54,"context_line":"                    msg \u003d _(\u0027Error running SSH command. Trying another CLDB\u0027)"},{"line_number":55,"context_line":"                    LOG.error(msg)"},{"line_number":56,"context_line":"                else:"},{"line_number":57,"context_line":"                    raise exception.ProcessExecutionError(six.text_type(e))"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_3be91db8","line":55,"range":{"start_line":55,"start_character":30,"end_line":55,"end_character":33},"in_reply_to":"bacf61ea_9b6929c1","updated":"2016-08-05 11:19:44.000000000","message":"Yes. Please, check manila/share/drivers/lvm.py or manila/share/drivers/generic.py for usage examples.\n\nAlso please refer to http://docs.openstack.org/developer/oslo.i18n/guidelines.html","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9882ab1609ec1049ba5a3afd08a6da3b1b7049c1","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            msg \u003d (_(\u0027Error running SSH command: %(cmd)s. \u0027"},{"line_number":95,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":96,"context_line":"                   {\u0027cmd\u0027: command, \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":97,"context_line":"            LOG.error(msg)"},{"line_number":98,"context_line":"            raise exception.ProcessExecutionError(msg)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_69e801e3","line":97,"range":{"start_line":97,"start_character":22,"end_line":97,"end_character":25},"updated":"2016-08-05 06:01:42.000000000","message":"_LE","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                    raise exception.ProcessExecutionError(six.text_type(e))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _run_ssh(self, host, cmd_list, check_exit_code\u003dFalse):"},{"line_number":63,"context_line":"        command \u003d \u0027 \u0027.join(pipes.quote(cmd_arg) for cmd_arg in cmd_list)"},{"line_number":64,"context_line":"        connection \u003d self.ssh_connections.get(host)"},{"line_number":65,"context_line":"        if connection is None:"},{"line_number":66,"context_line":"            ssh_name \u003d self.configuration.maprfs_ssh_name"},{"line_number":67,"context_line":"            password \u003d self.configuration.maprfs_ssh_pw"},{"line_number":68,"context_line":"            private_key \u003d self.configuration.maprfs_ssh_private_key"},{"line_number":69,"context_line":"            remote_ssh_port \u003d self.configuration.maprfs_ssh_port"},{"line_number":70,"context_line":"            ssh_conn_timeout \u003d self.configuration.ssh_conn_timeout"},{"line_number":71,"context_line":"            min_size \u003d self.configuration.ssh_min_pool_conn"},{"line_number":72,"context_line":"            max_size \u003d self.configuration.ssh_max_pool_conn"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            ssh_pool \u003d utils.SSHPool(host,"},{"line_number":75,"context_line":"                                     remote_ssh_port,"},{"line_number":76,"context_line":"                                     ssh_conn_timeout,"},{"line_number":77,"context_line":"                                     ssh_name,"},{"line_number":78,"context_line":"                                     password\u003dpassword,"},{"line_number":79,"context_line":"                                     privatekey\u003dprivate_key,"},{"line_number":80,"context_line":"                                     min_size\u003dmin_size,"},{"line_number":81,"context_line":"                                     max_size\u003dmax_size)"},{"line_number":82,"context_line":"            ssh \u003d ssh_pool.create()"},{"line_number":83,"context_line":"            self.ssh_connections[host] \u003d (ssh_pool, ssh)"},{"line_number":84,"context_line":"        else:"},{"line_number":85,"context_line":"            ssh_pool, ssh \u003d connection"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if not ssh.get_transport().is_active():"},{"line_number":88,"context_line":"            ssh_pool.remove(ssh)"},{"line_number":89,"context_line":"            ssh \u003d ssh_pool.create()"},{"line_number":90,"context_line":"            self.ssh_connections[host] \u003d (ssh_pool, ssh)"},{"line_number":91,"context_line":"        return processutils.ssh_execute("},{"line_number":92,"context_line":"            ssh,"},{"line_number":93,"context_line":"            command,"},{"line_number":94,"context_line":"            check_exit_code\u003dcheck_exit_code)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"},{"line_number":97,"context_line":"    def _as_user(cmd, user):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_323500f7","line":94,"range":{"start_line":63,"start_character":4,"end_line":94,"end_character":44},"updated":"2016-08-10 07:15:15.000000000","message":"Unit test missing","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                    raise exception.ProcessExecutionError(six.text_type(e))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _run_ssh(self, host, cmd_list, check_exit_code\u003dFalse):"},{"line_number":63,"context_line":"        command \u003d \u0027 \u0027.join(pipes.quote(cmd_arg) for cmd_arg in cmd_list)"},{"line_number":64,"context_line":"        connection \u003d self.ssh_connections.get(host)"},{"line_number":65,"context_line":"        if connection is None:"},{"line_number":66,"context_line":"            ssh_name \u003d self.configuration.maprfs_ssh_name"},{"line_number":67,"context_line":"            password \u003d self.configuration.maprfs_ssh_pw"},{"line_number":68,"context_line":"            private_key \u003d self.configuration.maprfs_ssh_private_key"},{"line_number":69,"context_line":"            remote_ssh_port \u003d self.configuration.maprfs_ssh_port"},{"line_number":70,"context_line":"            ssh_conn_timeout \u003d self.configuration.ssh_conn_timeout"},{"line_number":71,"context_line":"            min_size \u003d self.configuration.ssh_min_pool_conn"},{"line_number":72,"context_line":"            max_size \u003d self.configuration.ssh_max_pool_conn"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"            ssh_pool \u003d utils.SSHPool(host,"},{"line_number":75,"context_line":"                                     remote_ssh_port,"},{"line_number":76,"context_line":"                                     ssh_conn_timeout,"},{"line_number":77,"context_line":"                                     ssh_name,"},{"line_number":78,"context_line":"                                     password\u003dpassword,"},{"line_number":79,"context_line":"                                     privatekey\u003dprivate_key,"},{"line_number":80,"context_line":"                                     min_size\u003dmin_size,"},{"line_number":81,"context_line":"                                     max_size\u003dmax_size)"},{"line_number":82,"context_line":"            ssh \u003d ssh_pool.create()"},{"line_number":83,"context_line":"            self.ssh_connections[host] \u003d (ssh_pool, ssh)"},{"line_number":84,"context_line":"        else:"},{"line_number":85,"context_line":"            ssh_pool, ssh \u003d connection"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        if not ssh.get_transport().is_active():"},{"line_number":88,"context_line":"            ssh_pool.remove(ssh)"},{"line_number":89,"context_line":"            ssh \u003d ssh_pool.create()"},{"line_number":90,"context_line":"            self.ssh_connections[host] \u003d (ssh_pool, ssh)"},{"line_number":91,"context_line":"        return processutils.ssh_execute("},{"line_number":92,"context_line":"            ssh,"},{"line_number":93,"context_line":"            command,"},{"line_number":94,"context_line":"            check_exit_code\u003dcheck_exit_code)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @staticmethod"},{"line_number":97,"context_line":"    def _as_user(cmd, user):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_49edc18d","line":94,"range":{"start_line":63,"start_character":4,"end_line":94,"end_character":44},"in_reply_to":"9ad45d7e_323500f7","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            raise exception.ProcessExecutionError(out)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def get_volume_info(self, volume_name, columns\u003dNone):"},{"line_number":150,"context_line":"        cmd \u003d [\u0027maprcli\u0027, \u0027volume\u0027, \u0027info\u0027, \u0027-name\u0027, volume_name, \u0027-json\u0027]"},{"line_number":151,"context_line":"        if columns:"},{"line_number":152,"context_line":"            cmd +\u003d [\u0027-columns\u0027, \u0027,\u0027.join(columns)]"},{"line_number":153,"context_line":"        out, __ \u003d self._execute(*cmd)"},{"line_number":154,"context_line":"        return json.loads(out)[\u0027data\u0027][0]"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def fs_capacity(self):"},{"line_number":157,"context_line":"        cmd \u003d [\u0027hadoop\u0027, \u0027fs\u0027, \u0027-df\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_52199487","line":154,"range":{"start_line":150,"start_character":6,"end_line":154,"end_character":41},"updated":"2016-08-10 07:15:15.000000000","message":"Unit tests missing","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            raise exception.ProcessExecutionError(out)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def get_volume_info(self, volume_name, columns\u003dNone):"},{"line_number":150,"context_line":"        cmd \u003d [\u0027maprcli\u0027, \u0027volume\u0027, \u0027info\u0027, \u0027-name\u0027, volume_name, \u0027-json\u0027]"},{"line_number":151,"context_line":"        if columns:"},{"line_number":152,"context_line":"            cmd +\u003d [\u0027-columns\u0027, \u0027,\u0027.join(columns)]"},{"line_number":153,"context_line":"        out, __ \u003d self._execute(*cmd)"},{"line_number":154,"context_line":"        return json.loads(out)[\u0027data\u0027][0]"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def fs_capacity(self):"},{"line_number":157,"context_line":"        cmd \u003d [\u0027hadoop\u0027, \u0027fs\u0027, \u0027-df\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_c901b13b","line":154,"range":{"start_line":150,"start_character":6,"end_line":154,"end_character":41},"in_reply_to":"9ad45d7e_52199487","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a8f8c1ba9a7e436c529216a8759453eba0041793","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            del access_rules_map[access_rule[\u0027access_to\u0027]]"},{"line_number":227,"context_line":"            self.set_volume_ace(volume_name, access_rules_map.values())"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def add_volume_ace_rules(self, volume_name, access_rules):"},{"line_number":230,"context_line":"        if not access_rules:"},{"line_number":231,"context_line":"            return"},{"line_number":232,"context_line":"        access_rules_map \u003d self.get_access_rules(volume_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_4ab34c4d","line":229,"range":{"start_line":229,"start_character":48,"end_line":229,"end_character":60},"updated":"2016-08-05 16:09:20.000000000","message":"How about access level? such as read-only or read-write? please see the following link: https://github.com/openstack/manila/blob/master/manila/common/constants.py#L127","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            self.set_volume_ace(volume_name, access_rules_map.values())"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def add_volume_ace_rules(self, volume_name, access_rules):"},{"line_number":230,"context_line":"        if not access_rules:"},{"line_number":231,"context_line":"            return"},{"line_number":232,"context_line":"        access_rules_map \u003d self.get_access_rules(volume_name)"},{"line_number":233,"context_line":"        for access_rule in access_rules:"},{"line_number":234,"context_line":"            access_rules_map[access_rule[\u0027access_to\u0027]] \u003d access_rule"},{"line_number":235,"context_line":"        self.set_volume_ace(volume_name, access_rules_map.values())"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def remove_volume_ace_rules(self, volume_name, access_rules):"},{"line_number":238,"context_line":"        if not access_rules:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_92130c66","line":235,"range":{"start_line":230,"start_character":6,"end_line":235,"end_character":67},"updated":"2016-08-10 07:15:15.000000000","message":"unit tests missing","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":227,"context_line":"            self.set_volume_ace(volume_name, access_rules_map.values())"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def add_volume_ace_rules(self, volume_name, access_rules):"},{"line_number":230,"context_line":"        if not access_rules:"},{"line_number":231,"context_line":"            return"},{"line_number":232,"context_line":"        access_rules_map \u003d self.get_access_rules(volume_name)"},{"line_number":233,"context_line":"        for access_rule in access_rules:"},{"line_number":234,"context_line":"            access_rules_map[access_rule[\u0027access_to\u0027]] \u003d access_rule"},{"line_number":235,"context_line":"        self.set_volume_ace(volume_name, access_rules_map.values())"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def remove_volume_ace_rules(self, volume_name, access_rules):"},{"line_number":238,"context_line":"        if not access_rules:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_899e9905","line":235,"range":{"start_line":230,"start_character":6,"end_line":235,"end_character":67},"in_reply_to":"9ad45d7e_92130c66","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        self.set_volume_ace(volume_name, access_rules_map.values())"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def remove_volume_ace_rules(self, volume_name, access_rules):"},{"line_number":238,"context_line":"        if not access_rules:"},{"line_number":239,"context_line":"            return"},{"line_number":240,"context_line":"        access_rules_map \u003d self.get_access_rules(volume_name)"},{"line_number":241,"context_line":"        for access_rule in access_rules:"},{"line_number":242,"context_line":"            if access_rules_map.get(access_rule[\u0027access_to\u0027]):"},{"line_number":243,"context_line":"                del access_rules_map[access_rule[\u0027access_to\u0027]]"},{"line_number":244,"context_line":"        self.set_volume_ace(volume_name, access_rules_map.values())"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def get_access_rules(self, volume_name):"},{"line_number":247,"context_line":"        info \u003d self.get_volume_info(volume_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_1208bc2b","line":244,"range":{"start_line":238,"start_character":7,"end_line":244,"end_character":67},"updated":"2016-08-10 07:15:15.000000000","message":"unit tests missing","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        self.set_volume_ace(volume_name, access_rules_map.values())"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    def remove_volume_ace_rules(self, volume_name, access_rules):"},{"line_number":238,"context_line":"        if not access_rules:"},{"line_number":239,"context_line":"            return"},{"line_number":240,"context_line":"        access_rules_map \u003d self.get_access_rules(volume_name)"},{"line_number":241,"context_line":"        for access_rule in access_rules:"},{"line_number":242,"context_line":"            if access_rules_map.get(access_rule[\u0027access_to\u0027]):"},{"line_number":243,"context_line":"                del access_rules_map[access_rule[\u0027access_to\u0027]]"},{"line_number":244,"context_line":"        self.set_volume_ace(volume_name, access_rules_map.values())"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def get_access_rules(self, volume_name):"},{"line_number":247,"context_line":"        info \u003d self.get_volume_info(volume_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_c98891c9","line":244,"range":{"start_line":238,"start_character":7,"end_line":244,"end_character":67},"in_reply_to":"9ad45d7e_1208bc2b","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            return json.loads(out)[\u0027data\u0027][0][\u0027cluster\u0027][\u0027name\u0027]"},{"line_number":285,"context_line":"        except (IndexError, ValueError) as e:"},{"line_number":286,"context_line":"            msg \u003d (_(\"Failed to parse cluster name. Error: %s\")"},{"line_number":287,"context_line":"                   % six.text_type(e))"},{"line_number":288,"context_line":"            raise exception.ProcessExecutionError(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_8bc1ad82","line":287,"range":{"start_line":287,"start_character":19,"end_line":287,"end_character":37},"updated":"2016-08-06 23:00:44.000000000","message":"http://docs.openstack.org/developer/oslo.i18n/guidelines.html#avoid-forcing-the-translation-of-translatable-variables","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            return json.loads(out)[\u0027data\u0027][0][\u0027cluster\u0027][\u0027name\u0027]"},{"line_number":285,"context_line":"        except (IndexError, ValueError) as e:"},{"line_number":286,"context_line":"            msg \u003d (_(\"Failed to parse cluster name. Error: %s\")"},{"line_number":287,"context_line":"                   % six.text_type(e))"},{"line_number":288,"context_line":"            raise exception.ProcessExecutionError(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_49bb0176","line":287,"range":{"start_line":287,"start_character":19,"end_line":287,"end_character":37},"in_reply_to":"bacf61ea_8bc1ad82","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        read_accesses \u003d []"},{"line_number":192,"context_line":"        write_accesses \u003d []"},{"line_number":193,"context_line":"        for access_rule in access_rules:"},{"line_number":194,"context_line":"            if access_rule[\u0027access_level\u0027] \u003d\u003d \u0027ro\u0027:"},{"line_number":195,"context_line":"                read_accesses.append(access_rule[\u0027access_to\u0027])"},{"line_number":196,"context_line":"            if access_rule[\u0027access_level\u0027] \u003d\u003d \u0027rw\u0027:"},{"line_number":197,"context_line":"                read_accesses.append(access_rule[\u0027access_to\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_735a0752","line":194,"range":{"start_line":194,"start_character":46,"end_line":194,"end_character":50},"updated":"2016-08-16 08:08:06.000000000","message":"please use   \"constants.ACCESS_LEVEL_RO\" instead of \u0027ro\u0027.\n\nfrom manila.common import constants","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        for access_rule in access_rules:"},{"line_number":194,"context_line":"            if access_rule[\u0027access_level\u0027] \u003d\u003d \u0027ro\u0027:"},{"line_number":195,"context_line":"                read_accesses.append(access_rule[\u0027access_to\u0027])"},{"line_number":196,"context_line":"            if access_rule[\u0027access_level\u0027] \u003d\u003d \u0027rw\u0027:"},{"line_number":197,"context_line":"                read_accesses.append(access_rule[\u0027access_to\u0027])"},{"line_number":198,"context_line":"                write_accesses.append(access_rule[\u0027access_to\u0027])"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_7d85b0ab","line":196,"range":{"start_line":196,"start_character":12,"end_line":196,"end_character":14},"updated":"2016-08-16 08:08:06.000000000","message":"elif","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        for access_rule in access_rules:"},{"line_number":194,"context_line":"            if access_rule[\u0027access_level\u0027] \u003d\u003d \u0027ro\u0027:"},{"line_number":195,"context_line":"                read_accesses.append(access_rule[\u0027access_to\u0027])"},{"line_number":196,"context_line":"            if access_rule[\u0027access_level\u0027] \u003d\u003d \u0027rw\u0027:"},{"line_number":197,"context_line":"                read_accesses.append(access_rule[\u0027access_to\u0027])"},{"line_number":198,"context_line":"                write_accesses.append(access_rule[\u0027access_to\u0027])"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_3da33851","line":196,"range":{"start_line":196,"start_character":46,"end_line":196,"end_character":50},"updated":"2016-08-16 08:08:06.000000000","message":"please use   \"constants.ACCESS_LEVEL_RW\" instead of \u0027rw\u0027.","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f55307aecdd9030243eef414737c36087cd96802","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        cmd \u003d self._add_params(cmd, **kwargs)"},{"line_number":142,"context_line":"        self._execute(*cmd)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def volume_exist(self, volume_name):"},{"line_number":145,"context_line":"        cmd \u003d [self.maprcli_bin, \u0027volume\u0027, \u0027info\u0027, \u0027-name\u0027, volume_name]"},{"line_number":146,"context_line":"        out, __ \u003d self._execute(*cmd, check_exit_code\u003dFalse)"},{"line_number":147,"context_line":"        return \u0027No such volume\u0027 not in out"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_8146861f","line":144,"range":{"start_line":144,"start_character":15,"end_line":144,"end_character":20},"updated":"2016-12-20 01:32:04.000000000","message":"nit: exists","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b7cb50451426a9a076a5f7ec96e2fed358989925","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        cmd \u003d self._add_params(cmd, **kwargs)"},{"line_number":142,"context_line":"        self._execute(*cmd)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def volume_exist(self, volume_name):"},{"line_number":145,"context_line":"        cmd \u003d [self.maprcli_bin, \u0027volume\u0027, \u0027info\u0027, \u0027-name\u0027, volume_name]"},{"line_number":146,"context_line":"        out, __ \u003d self._execute(*cmd, check_exit_code\u003dFalse)"},{"line_number":147,"context_line":"        return \u0027No such volume\u0027 not in out"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_cbd4f4be","line":144,"range":{"start_line":144,"start_character":15,"end_line":144,"end_character":20},"in_reply_to":"1a6eadb0_8146861f","updated":"2016-12-20 16:28:47.000000000","message":"Done","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77e4874bfde02d7f4b224791d65e8ce039c9ddad","unresolved":false,"context_lines":[{"line_number":172,"context_line":"               name, \u0027-volume\u0027, volume_name]"},{"line_number":173,"context_line":"        out, __ \u003d self._execute(*cmd, check_exit_code\u003dFalse)"},{"line_number":174,"context_line":"        # if snapshot does not exist do not raise ProcessExecutionError"},{"line_number":175,"context_line":"        if \u0027ERROR\u0027 in out and \u0027No such\u0027 not in out:"},{"line_number":176,"context_line":"            raise exception.ProcessExecutionError(out)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def get_volume_info(self, volume_name, columns\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_5b2b3d94","line":175,"updated":"2017-01-05 05:45:03.000000000","message":"I suggest that you make \u0027ERROR\u0027, \u0027No such\u0027, and \u0027No such volume\u0027 constants as they are used in multiple places.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":172,"context_line":"               name, \u0027-volume\u0027, volume_name]"},{"line_number":173,"context_line":"        out, __ \u003d self._execute(*cmd, check_exit_code\u003dFalse)"},{"line_number":174,"context_line":"        # if snapshot does not exist do not raise ProcessExecutionError"},{"line_number":175,"context_line":"        if \u0027ERROR\u0027 in out and \u0027No such\u0027 not in out:"},{"line_number":176,"context_line":"            raise exception.ProcessExecutionError(out)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def get_volume_info(self, volume_name, columns\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_63476f4b","line":175,"in_reply_to":"ba5201f7_5b2b3d94","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77e4874bfde02d7f4b224791d65e8ce039c9ddad","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        return access_rules_map"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _retrieve_access_rules_from_ace(self, ace, ace_type, access_rules_map):"},{"line_number":315,"context_line":"        access \u003d constants.ACCESS_LEVEL_RW if ace_type \u003d\u003d \u0027w\u0027 \\"},{"line_number":316,"context_line":"            else constants.ACCESS_LEVEL_RO"},{"line_number":317,"context_line":"        if ace not in [\u0027p\u0027, \u0027\u0027]:"},{"line_number":318,"context_line":"            write_rules \u003d [x.strip() for x in ace.split(\u0027|\u0027)]"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_3b059913","line":315,"updated":"2017-01-05 05:45:03.000000000","message":"better to use () than \\","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        return access_rules_map"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _retrieve_access_rules_from_ace(self, ace, ace_type, access_rules_map):"},{"line_number":315,"context_line":"        access \u003d constants.ACCESS_LEVEL_RW if ace_type \u003d\u003d \u0027w\u0027 \\"},{"line_number":316,"context_line":"            else constants.ACCESS_LEVEL_RO"},{"line_number":317,"context_line":"        if ace not in [\u0027p\u0027, \u0027\u0027]:"},{"line_number":318,"context_line":"            write_rules \u003d [x.strip() for x in ace.split(\u0027|\u0027)]"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_63e3ef33","line":315,"in_reply_to":"ba5201f7_3b059913","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                return out, err"},{"line_number":70,"context_line":"            except exception.ProcessExecutionError as e:"},{"line_number":71,"context_line":"                if self._check_error(e):"},{"line_number":72,"context_line":"                    raise e"},{"line_number":73,"context_line":"                elif x \u003c len(self.hosts) - 1:"},{"line_number":74,"context_line":"                    msg \u003d _LE(\u0027Error running SSH command. Trying another host\u0027)"},{"line_number":75,"context_line":"                    LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_e3beb8ac","line":72,"updated":"2017-01-07 05:07:59.000000000","message":"Remove \"e\".  \"raise\" is enough.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                return out, err"},{"line_number":70,"context_line":"            except exception.ProcessExecutionError as e:"},{"line_number":71,"context_line":"                if self._check_error(e):"},{"line_number":72,"context_line":"                    raise e"},{"line_number":73,"context_line":"                elif x \u003c len(self.hosts) - 1:"},{"line_number":74,"context_line":"                    msg \u003d _LE(\u0027Error running SSH command. Trying another host\u0027)"},{"line_number":75,"context_line":"                    LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_0b99b96e","line":72,"in_reply_to":"ba5201f7_e3beb8ac","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                    msg \u003d _LE(\u0027Error running SSH command. Trying another host\u0027)"},{"line_number":75,"context_line":"                    LOG.error(msg)"},{"line_number":76,"context_line":"                else:"},{"line_number":77,"context_line":"                    raise e"},{"line_number":78,"context_line":"            except Exception as e:"},{"line_number":79,"context_line":"                if x \u003c len(self.hosts) - 1:"},{"line_number":80,"context_line":"                    msg \u003d _LE(\u0027Error running SSH command. Trying another host\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_03e01ccc","line":77,"updated":"2017-01-07 05:07:59.000000000","message":"Same","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                    msg \u003d _LE(\u0027Error running SSH command. Trying another host\u0027)"},{"line_number":75,"context_line":"                    LOG.error(msg)"},{"line_number":76,"context_line":"                else:"},{"line_number":77,"context_line":"                    raise e"},{"line_number":78,"context_line":"            except Exception as e:"},{"line_number":79,"context_line":"                if x \u003c len(self.hosts) - 1:"},{"line_number":80,"context_line":"                    msg \u003d _LE(\u0027Error running SSH command. Trying another host\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_2b9cbd5c","line":77,"in_reply_to":"ba5201f7_03e01ccc","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    def get_access_rules(self, volume_name):"},{"line_number":308,"context_line":"        info \u003d self.get_volume_info(volume_name)"},{"line_number":309,"context_line":"        aces \u003d info[\u0027volumeAces\u0027]"},{"line_number":310,"context_line":"        read_ace \u003d str(aces[\u0027readAce\u0027])"},{"line_number":311,"context_line":"        write_ace \u003d str(aces[\u0027writeAce\u0027])"},{"line_number":312,"context_line":"        access_rules_map \u003d {}"},{"line_number":313,"context_line":"        self._retrieve_access_rules_from_ace(read_ace, \u0027r\u0027, access_rules_map)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_83d40cec","line":310,"updated":"2017-01-07 05:07:59.000000000","message":"str -\u003e six.text_type","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":307,"context_line":"    def get_access_rules(self, volume_name):"},{"line_number":308,"context_line":"        info \u003d self.get_volume_info(volume_name)"},{"line_number":309,"context_line":"        aces \u003d info[\u0027volumeAces\u0027]"},{"line_number":310,"context_line":"        read_ace \u003d str(aces[\u0027readAce\u0027])"},{"line_number":311,"context_line":"        write_ace \u003d str(aces[\u0027writeAce\u0027])"},{"line_number":312,"context_line":"        access_rules_map \u003d {}"},{"line_number":313,"context_line":"        self._retrieve_access_rules_from_ace(read_ace, \u0027r\u0027, access_rules_map)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_6b9ec555","line":310,"in_reply_to":"ba5201f7_83d40cec","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        info \u003d self.get_volume_info(volume_name)"},{"line_number":309,"context_line":"        aces \u003d info[\u0027volumeAces\u0027]"},{"line_number":310,"context_line":"        read_ace \u003d str(aces[\u0027readAce\u0027])"},{"line_number":311,"context_line":"        write_ace \u003d str(aces[\u0027writeAce\u0027])"},{"line_number":312,"context_line":"        access_rules_map \u003d {}"},{"line_number":313,"context_line":"        self._retrieve_access_rules_from_ace(read_ace, \u0027r\u0027, access_rules_map)"},{"line_number":314,"context_line":"        self._retrieve_access_rules_from_ace(write_ace, \u0027w\u0027, access_rules_map)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_a3cf5054","line":311,"updated":"2017-01-07 05:07:59.000000000","message":"same","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        info \u003d self.get_volume_info(volume_name)"},{"line_number":309,"context_line":"        aces \u003d info[\u0027volumeAces\u0027]"},{"line_number":310,"context_line":"        read_ace \u003d str(aces[\u0027readAce\u0027])"},{"line_number":311,"context_line":"        write_ace \u003d str(aces[\u0027writeAce\u0027])"},{"line_number":312,"context_line":"        access_rules_map \u003d {}"},{"line_number":313,"context_line":"        self._retrieve_access_rules_from_ace(read_ace, \u0027r\u0027, access_rules_map)"},{"line_number":314,"context_line":"        self._retrieve_access_rules_from_ace(write_ace, \u0027w\u0027, access_rules_map)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_8bada98a","line":311,"in_reply_to":"ba5201f7_a3cf5054","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"93ebc68bcb718cec1c4a10db81c4e74c3b3ec754","unresolved":false,"context_lines":[{"line_number":226,"context_line":"            free \u003d int(fields[3])"},{"line_number":227,"context_line":"        except (IndexError, ValueError) as e:"},{"line_number":228,"context_line":"            msg \u003d (_(\u0027Failed to get MapR-FS capacity info. \u0027"},{"line_number":229,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":230,"context_line":"                   {\u0027excmsg\u0027: six.text_type(e)})"},{"line_number":231,"context_line":"            LOG.exception(msg)"},{"line_number":232,"context_line":"            raise exception.ProcessExecutionError(msg)"},{"line_number":233,"context_line":"        return total, free"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_00f06b90","line":230,"range":{"start_line":229,"start_character":21,"end_line":230,"end_character":48},"updated":"2017-01-11 17:29:00.000000000","message":"These two lines become redundant. The same in all other similar places. The point in using \"LOG.exception\" is to log exception automatically without need to insert it into message each time explicitly.","commit_id":"869a93ca3cd901ccb804e6157018eca93de0e6ab"}],"manila/share/drivers/maprfs/maprfs_native.py":[{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 Intel, Corp."},{"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":"bacf61ea_430bee7d","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2016-08-02 17:04:40.000000000","message":"Are you sure in the year and company name?","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            self._maprfs_util.create_volume(volume_name, share_dir,"},{"line_number":143,"context_line":"                                            share[\u0027size\u0027],"},{"line_number":144,"context_line":"                                            **metadata)"},{"line_number":145,"context_line":"            self._maprfs_util.maprfs_chmod(share_dir, \u0027777\u0027)"},{"line_number":146,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":147,"context_line":"            msg \u003d (_(\u0027Failed to create volume in MapR-FS for the \u0027"},{"line_number":148,"context_line":"                     \u0027share %(share_name)s. Error: %(excmsg)s.\u0027) %"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_6e53796d","line":145,"range":{"start_line":145,"start_character":55,"end_line":145,"end_character":58},"updated":"2016-08-02 17:04:40.000000000","message":"Out of curiosity, isn\u0027t 777 a bit too broad?","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    def _set_share_size(self, share, size):"},{"line_number":155,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":156,"context_line":"        try:"},{"line_number":157,"context_line":"            if share[\u0027size\u0027] \u003e size:"},{"line_number":158,"context_line":"                info \u003d self._maprfs_util.get_volume_info(volume_name)"},{"line_number":159,"context_line":"                used \u003d info[\u0027totalused\u0027]"},{"line_number":160,"context_line":"                if int(used) \u003e\u003d int(size) * 1024:"},{"line_number":161,"context_line":"                    raise exception.ShareShrinkingPossibleDataLoss("},{"line_number":162,"context_line":"                        share_id\u003dshare[\u0027id\u0027])"},{"line_number":163,"context_line":"            self._maprfs_util.set_volume_size(volume_name, size)"},{"line_number":164,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":165,"context_line":"            msg \u003d (_(\u0027Failed to set space quota for the \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_ce3425fd","line":162,"range":{"start_line":157,"start_character":0,"end_line":162,"end_character":45},"updated":"2016-08-02 17:04:40.000000000","message":"I suggest moving this out of try block.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            LOG.error(msg)"},{"line_number":282,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def update_access(self, context, share, access_rules, add_rules,"},{"line_number":285,"context_line":"                      delete_rules, share_server\u003dNone):"},{"line_number":286,"context_line":"        \"\"\"Update access rules for given share.\"\"\""},{"line_number":287,"context_line":"        for access in access_rules:"},{"line_number":288,"context_line":"            if access[\u0027access_type\u0027] !\u003d \u0027user\u0027:"},{"line_number":289,"context_line":"                msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":290,"context_line":"                LOG.error(msg)"},{"line_number":291,"context_line":"                raise exception.InvalidShareAccess(msg)"},{"line_number":292,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":293,"context_line":"        try:"},{"line_number":294,"context_line":"            # \u0027update_access\u0027 is called before share is removed even if it"},{"line_number":295,"context_line":"            #  is in error state, so this method shouldn`t raise exception"},{"line_number":296,"context_line":"            #  in this case"},{"line_number":297,"context_line":"            if self._maprfs_util.volume_exist(volume_name):"},{"line_number":298,"context_line":"                self._maprfs_util.set_volume_ace(volume_name, access_rules)"},{"line_number":299,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":300,"context_line":"            msg \u003d (_(\u0027Failed to update access for share %(name)s. \u0027"},{"line_number":301,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":302,"context_line":"                   {\u0027name\u0027: share[\u0027name\u0027],"},{"line_number":303,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":304,"context_line":"            LOG.error(msg)"},{"line_number":305,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":308,"context_line":"        \"\"\"Extend share storage.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_a91c4b6b","line":305,"range":{"start_line":284,"start_character":3,"end_line":305,"end_character":48},"updated":"2016-08-02 17:04:40.000000000","message":"What about add_rules \u0026 delete rules?","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def check_for_setup_error(self):"},{"line_number":325,"context_line":"        \"\"\"Return an error if the prerequisites are met.\"\"\""},{"line_number":326,"context_line":"        if not (self.configuration.maprfs_cldb_ip and self.configuration"},{"line_number":327,"context_line":"                .maprfs_zookeeper_ip):"},{"line_number":328,"context_line":"            msg \u003d _(\u0027Not specify the MapR cluster yet! \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_0972b7ad","line":325,"range":{"start_line":325,"start_character":48,"end_line":325,"end_character":56},"updated":"2016-08-02 17:04:40.000000000","message":"Are not met?","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":13998,"name":"Daniel Gonzalez Nothnagel","email":"daniel.gonzalez.nothnagel@sap.com","username":"dgonzalez"},"change_message_id":"015f022ca6ae2363c61d29d5eddb133ecc7b916f","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    def _update_share_stats(self):"},{"line_number":348,"context_line":"        \"\"\"Retrieves stats info of share directories group.\"\"\""},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        data \u003d dict("},{"line_number":351,"context_line":"            share_backend_name\u003dself.backend_name,"},{"line_number":352,"context_line":"            storage_protocol\u003d\u0027MAPRFS\u0027,"},{"line_number":353,"context_line":"            driver_handles_share_servers\u003dself.driver_handles_share_servers,"},{"line_number":354,"context_line":"            vendor_name\u003d\u0027Open Source\u0027,"},{"line_number":355,"context_line":"            driver_version\u003d\u00271.0\u0027,"},{"line_number":356,"context_line":"            snapshot_support\u003dTrue)"},{"line_number":357,"context_line":"        try:"},{"line_number":358,"context_line":"            total, free \u003d self._maprfs_util.fs_capacity()"},{"line_number":359,"context_line":"        except exception.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_0c9c5e68","line":356,"range":{"start_line":350,"start_character":8,"end_line":356,"end_character":34},"updated":"2016-08-03 11:32:57.000000000","message":"You could move the creation of this dict below the try-except block.\nThis would allow you to define total_capacity_gb and free_capacity_gb directly when creating the dict, instead of creating the dict and updating it later with the two values.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"a6882b8e42b764bb08b8d7279de8dba2a3ebd387","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from manila.share.drivers.maprfs import driver_util as mapru"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"API \u003d api.API()"},{"line_number":36,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"maprfs_native_share_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_def6255c","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":15},"updated":"2016-08-04 13:35:12.000000000","message":"This code brake unit tests, as it requires running manila process. I think I need advice, how it could be fixed.","commit_id":"0bc7fb93a899534f89cea2f0a71863d312e38e68"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5d95d459cc36f5e4024b29c74cb37d1c6bff7c2f","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from manila.share.drivers.maprfs import driver_util as mapru"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"API \u003d api.API()"},{"line_number":36,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"maprfs_native_share_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_67116c04","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":15},"in_reply_to":"bacf61ea_def6255c","updated":"2016-08-04 14:17:32.000000000","message":"Why do you ever need it in the first place?","commit_id":"0bc7fb93a899534f89cea2f0a71863d312e38e68"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"a6882b8e42b764bb08b8d7279de8dba2a3ebd387","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    def _set_share_size(self, share, size):"},{"line_number":148,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            if share[\u0027size\u0027] \u003e size:"},{"line_number":151,"context_line":"                info \u003d self._maprfs_util.get_volume_info(volume_name)"},{"line_number":152,"context_line":"                used \u003d info[\u0027totalused\u0027]"},{"line_number":153,"context_line":"                if int(used) \u003e\u003d int(size) * 1024:"},{"line_number":154,"context_line":"                    raise exception.ShareShrinkingPossibleDataLoss("},{"line_number":155,"context_line":"                        share_id\u003dshare[\u0027id\u0027])"},{"line_number":156,"context_line":"            self._maprfs_util.set_volume_size(volume_name, size)"},{"line_number":157,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":158,"context_line":"            msg \u003d (_(\u0027Failed to set space quota for the \u0027"},{"line_number":159,"context_line":"                     \u0027share %(share_name)s. Error: %(excmsg)s.\u0027) %"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_feefa9ae","line":156,"range":{"start_line":150,"start_character":11,"end_line":156,"end_character":64},"updated":"2016-08-04 13:35:12.000000000","message":"I decided to leave this code inside of try/catch block as _get_volume_info can also raise ProcessExecutionError.","commit_id":"0bc7fb93a899534f89cea2f0a71863d312e38e68"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"5d95d459cc36f5e4024b29c74cb37d1c6bff7c2f","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    def _set_share_size(self, share, size):"},{"line_number":148,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            if share[\u0027size\u0027] \u003e size:"},{"line_number":151,"context_line":"                info \u003d self._maprfs_util.get_volume_info(volume_name)"},{"line_number":152,"context_line":"                used \u003d info[\u0027totalused\u0027]"},{"line_number":153,"context_line":"                if int(used) \u003e\u003d int(size) * 1024:"},{"line_number":154,"context_line":"                    raise exception.ShareShrinkingPossibleDataLoss("},{"line_number":155,"context_line":"                        share_id\u003dshare[\u0027id\u0027])"},{"line_number":156,"context_line":"            self._maprfs_util.set_volume_size(volume_name, size)"},{"line_number":157,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":158,"context_line":"            msg \u003d (_(\u0027Failed to set space quota for the \u0027"},{"line_number":159,"context_line":"                     \u0027share %(share_name)s. Error: %(excmsg)s.\u0027) %"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_07f07090","line":156,"range":{"start_line":150,"start_character":11,"end_line":156,"end_character":64},"in_reply_to":"bacf61ea_feefa9ae","updated":"2016-08-04 14:17:32.000000000","message":"Ok, sounds reasonable.","commit_id":"0bc7fb93a899534f89cea2f0a71863d312e38e68"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9882ab1609ec1049ba5a3afd08a6da3b1b7049c1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    cfg.StrOpt(\u0027maprfs_ssh_pw\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027Cluster node SSH login password, \u0027"},{"line_number":49,"context_line":"                    \u0027This parameter is not necessary, if \u0027"},{"line_number":50,"context_line":"                    \u0027\\\u0027cldb_ssh_private_key\\\u0027 is configured.\u0027),"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027maprfs_ssh_private_key\u0027,"},{"line_number":52,"context_line":"               help\u003d\u0027Path to SSH private \u0027"},{"line_number":53,"context_line":"                    \u0027key for login.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_a9aaf96e","line":50,"range":{"start_line":50,"start_character":23,"end_line":50,"end_character":43},"updated":"2016-08-05 06:01:42.000000000","message":"maprfs_ssh_private_key?","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"341fe95670f8bf40ebb1596f74acd5b8a43f5570","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    cfg.StrOpt(\u0027maprfs_ssh_pw\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027Cluster node SSH login password, \u0027"},{"line_number":49,"context_line":"                    \u0027This parameter is not necessary, if \u0027"},{"line_number":50,"context_line":"                    \u0027\\\u0027cldb_ssh_private_key\\\u0027 is configured.\u0027),"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027maprfs_ssh_private_key\u0027,"},{"line_number":52,"context_line":"               help\u003d\u0027Path to SSH private \u0027"},{"line_number":53,"context_line":"                    \u0027key for login.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_6030fa56","line":50,"range":{"start_line":50,"start_character":23,"end_line":50,"end_character":43},"in_reply_to":"bacf61ea_a9aaf96e","updated":"2016-08-05 13:54:42.000000000","message":"Done","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9882ab1609ec1049ba5a3afd08a6da3b1b7049c1","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self._maprfs_util \u003d mapru.get_version_handler(self.configuration)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _get_share_dir(self, share_name):"},{"line_number":93,"context_line":"        return os.path.join(self._base_volume_dir, share_name)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _get_volume_name(self, share_name):"},{"line_number":96,"context_line":"        return share_name"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_1bc8a854","line":93,"updated":"2016-08-05 06:01:42.000000000","message":"what if the configured maprfs_base_volume_dir not tailed with \"/\"","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"46313a3ec94a2539040ca633fd48f810bf977e7b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self._maprfs_util \u003d mapru.get_version_handler(self.configuration)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _get_share_dir(self, share_name):"},{"line_number":93,"context_line":"        return os.path.join(self._base_volume_dir, share_name)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _get_volume_name(self, share_name):"},{"line_number":96,"context_line":"        return share_name"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_5be5f1a1","line":93,"in_reply_to":"bacf61ea_1bc8a854","updated":"2016-08-05 11:21:38.000000000","message":"it should have no effect, os.path.join will add \u0027/\u0027 if it is not present.","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9882ab1609ec1049ba5a3afd08a6da3b1b7049c1","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _get_snapshot_path(self, snapshot):"},{"line_number":99,"context_line":"        \"\"\"Return snapshot path on storage provider.\"\"\""},{"line_number":100,"context_line":"        return os.path.join(self._base_volume_dir,"},{"line_number":101,"context_line":"                            self._get_share_dir(snapshot[\u0027share_name\u0027]),"},{"line_number":102,"context_line":"                            \u0027.snapshot\u0027, snapshot[\u0027name\u0027])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _get_share_export_locations(self, share):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_bb2b5cea","line":101,"range":{"start_line":100,"start_character":28,"end_line":101,"end_character":72},"updated":"2016-08-05 06:01:42.000000000","message":"_get_share_dir already joins self._base_volume_dir, so the result snapshot path will join _base_volume_dir twice?","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"341fe95670f8bf40ebb1596f74acd5b8a43f5570","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _get_snapshot_path(self, snapshot):"},{"line_number":99,"context_line":"        \"\"\"Return snapshot path on storage provider.\"\"\""},{"line_number":100,"context_line":"        return os.path.join(self._base_volume_dir,"},{"line_number":101,"context_line":"                            self._get_share_dir(snapshot[\u0027share_name\u0027]),"},{"line_number":102,"context_line":"                            \u0027.snapshot\u0027, snapshot[\u0027name\u0027])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _get_share_export_locations(self, share):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_401fb6b6","line":101,"range":{"start_line":100,"start_character":28,"end_line":101,"end_character":72},"in_reply_to":"bacf61ea_bb2b5cea","updated":"2016-08-05 13:54:42.000000000","message":"Done","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"9882ab1609ec1049ba5a3afd08a6da3b1b7049c1","unresolved":false,"context_lines":[{"line_number":340,"context_line":"            self._maprfs_util.maprfs_ls("},{"line_number":341,"context_line":"                os.path.join(self._base_volume_dir, \u0027\u0027))"},{"line_number":342,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":343,"context_line":"            msg \u003d _(\u0027Invalig  \"maprfs_base_volume_name\". No such directory\u0027)"},{"line_number":344,"context_line":"            LOG.error(msg)"},{"line_number":345,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_9e048615","line":343,"range":{"start_line":343,"start_character":21,"end_line":343,"end_character":28},"updated":"2016-08-05 06:01:42.000000000","message":"Invalid","commit_id":"7b78690f25fdbe7a78207a69371ebe5ac681547b"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                    \u0027This parameter is not necessary, if \u0027"},{"line_number":49,"context_line":"                    \u0027\\\u0027maprfs_ssh_private_key\\\u0027 is configured.\u0027),"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027maprfs_ssh_private_key\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027Path to SSH private \u0027"},{"line_number":52,"context_line":"                    \u0027key for login.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027maprfs_base_volume_dir\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027/\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_d26904c0","line":51,"range":{"start_line":51,"start_character":40,"end_line":51,"end_character":42},"updated":"2016-08-10 07:15:15.000000000","message":"No newline needed","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                    \u0027This parameter is not necessary, if \u0027"},{"line_number":49,"context_line":"                    \u0027\\\u0027maprfs_ssh_private_key\\\u0027 is configured.\u0027),"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027maprfs_ssh_private_key\u0027,"},{"line_number":51,"context_line":"               help\u003d\u0027Path to SSH private \u0027"},{"line_number":52,"context_line":"                    \u0027key for login.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027maprfs_base_volume_dir\u0027,"},{"line_number":54,"context_line":"               default\u003d\u0027/\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_c953716b","line":51,"range":{"start_line":51,"start_character":40,"end_line":51,"end_character":42},"in_reply_to":"9ad45d7e_d26904c0","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"\"\"MapR-FS Share Driver."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    Executes commands relating to shares."},{"line_number":68,"context_line":"    driver_handles_share_servers must be False because"},{"line_number":69,"context_line":"    this driver only manages existing shares"},{"line_number":70,"context_line":"    API version history:"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_92278c63","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":54},"updated":"2016-08-10 07:15:15.000000000","message":"I think it\u0027s a good idea to set in __init__: \n  self.driver_handles_share_servers \u003d False\n\nWith that driver.py _verify_share_server_handling will have a proper error handling.","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    \"\"\"MapR-FS Share Driver."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    Executes commands relating to shares."},{"line_number":68,"context_line":"    driver_handles_share_servers must be False because"},{"line_number":69,"context_line":"    this driver only manages existing shares"},{"line_number":70,"context_line":"    API version history:"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_89597991","line":68,"range":{"start_line":68,"start_character":4,"end_line":68,"end_character":54},"in_reply_to":"9ad45d7e_92278c63","updated":"2016-08-12 17:50:14.000000000","message":"But it actually has proper error handling. driver_handles_share_servers is a property method that takes value from configuration. And driver.py _verify_share_server_handling checks whether this values is equal to value set in driver through super().__init__","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def _create_share(self, share, **metadata):"},{"line_number":125,"context_line":"        \"\"\"Creates a share.\"\"\""},{"line_number":126,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027maprfs\u0027:"},{"line_number":127,"context_line":"            msg \u003d _(\u0027Only MapRFS protocol supported!\u0027)"},{"line_number":128,"context_line":"            LOG.error(msg)"},{"line_number":129,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":130,"context_line":"        share_dir \u003d self._get_share_dir(share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_12ca7c6d","line":127,"updated":"2016-08-10 07:15:15.000000000","message":"Better: embed the used share_proto in the error message.","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def _create_share(self, share, **metadata):"},{"line_number":125,"context_line":"        \"\"\"Creates a share.\"\"\""},{"line_number":126,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027maprfs\u0027:"},{"line_number":127,"context_line":"            msg \u003d _(\u0027Only MapRFS protocol supported!\u0027)"},{"line_number":128,"context_line":"            LOG.error(msg)"},{"line_number":129,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":130,"context_line":"        share_dir \u003d self._get_share_dir(share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_c939b1da","line":127,"in_reply_to":"9ad45d7e_12ca7c6d","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        return 0"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":168,"context_line":"        \"\"\"Create a MapRFS volume which acted as a share.\"\"\""},{"line_number":169,"context_line":"        metadata \u003d self.api.get_share_metadata(context,"},{"line_number":170,"context_line":"                                               {\u0027id\u0027: share[\u0027share_id\u0027]})"},{"line_number":171,"context_line":"        self._create_share(share, **metadata)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_8b488d2e","line":168,"range":{"start_line":168,"start_character":40,"end_line":168,"end_character":45},"updated":"2016-08-06 23:00:44.000000000","message":"nit: acts..","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        return 0"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":168,"context_line":"        \"\"\"Create a MapRFS volume which acted as a share.\"\"\""},{"line_number":169,"context_line":"        metadata \u003d self.api.get_share_metadata(context,"},{"line_number":170,"context_line":"                                               {\u0027id\u0027: share[\u0027share_id\u0027]})"},{"line_number":171,"context_line":"        self._create_share(share, **metadata)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_e919157b","line":168,"range":{"start_line":168,"start_character":40,"end_line":168,"end_character":45},"in_reply_to":"bacf61ea_8b488d2e","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a8f8c1ba9a7e436c529216a8759453eba0041793","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                     \u0027the share %(share_name)s. Error: %(excmsg)s.\u0027) %"},{"line_number":212,"context_line":"                   {\u0027snapshotname\u0027: snapshot_name,"},{"line_number":213,"context_line":"                    \u0027share_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":214,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":215,"context_line":"            LOG.error(msg)"},{"line_number":216,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_c76f35c2","line":214,"range":{"start_line":214,"start_character":30,"end_line":214,"end_character":46},"updated":"2016-08-05 16:09:20.000000000","message":"There\u0027s no need to cast an exception to a string.","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                     \u0027the share %(share_name)s. Error: %(excmsg)s.\u0027) %"},{"line_number":212,"context_line":"                   {\u0027snapshotname\u0027: snapshot_name,"},{"line_number":213,"context_line":"                    \u0027share_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":214,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":215,"context_line":"            LOG.error(msg)"},{"line_number":216,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_8908592a","line":214,"range":{"start_line":214,"start_character":30,"end_line":214,"end_character":46},"in_reply_to":"bacf61ea_c76f35c2","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a8f8c1ba9a7e436c529216a8759453eba0041793","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            msg \u003d (_(\u0027Failed to delete share %(share_name)s. \u0027"},{"line_number":225,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":226,"context_line":"                   {\u0027share_name\u0027: share[\u0027name\u0027],"},{"line_number":227,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":228,"context_line":"            LOG.error(msg)"},{"line_number":229,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_c742950e","line":227,"range":{"start_line":227,"start_character":30,"end_line":227,"end_character":46},"updated":"2016-08-05 16:09:20.000000000","message":"There\u0027s no need to cast an exception to a string.","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            msg \u003d (_(\u0027Failed to delete share %(share_name)s. \u0027"},{"line_number":225,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":226,"context_line":"                   {\u0027share_name\u0027: share[\u0027name\u0027],"},{"line_number":227,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":228,"context_line":"            LOG.error(msg)"},{"line_number":229,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":230,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_29032d0f","line":227,"range":{"start_line":227,"start_character":30,"end_line":227,"end_character":46},"in_reply_to":"bacf61ea_c742950e","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a8f8c1ba9a7e436c529216a8759453eba0041793","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        if access[\u0027access_type\u0027] !\u003d \u0027user\u0027:"},{"line_number":248,"context_line":"            msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":249,"context_line":"            LOG.error(msg)"},{"line_number":250,"context_line":"            raise exception.InvalidShareAccess(msg)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":253,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_e724f960","line":250,"range":{"start_line":250,"start_character":28,"end_line":250,"end_character":51},"updated":"2016-08-05 16:09:20.000000000","message":"InvalidShareAccess(reason\u003dmsg)","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        if access[\u0027access_type\u0027] !\u003d \u0027user\u0027:"},{"line_number":248,"context_line":"            msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":249,"context_line":"            LOG.error(msg)"},{"line_number":250,"context_line":"            raise exception.InvalidShareAccess(msg)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":253,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_e602e40a","line":250,"range":{"start_line":250,"start_character":28,"end_line":250,"end_character":51},"in_reply_to":"bacf61ea_e724f960","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a8f8c1ba9a7e436c529216a8759453eba0041793","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":253,"context_line":"        try:"},{"line_number":254,"context_line":"            self._maprfs_util.add_volume_ace_rule(volume_name, access)"},{"line_number":255,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":256,"context_line":"            msg \u003d (_(\u0027Failed to allow access for share %(name)s. \u0027"},{"line_number":257,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_ea55e0f9","line":254,"range":{"start_line":254,"start_character":30,"end_line":254,"end_character":70},"updated":"2016-08-05 16:09:20.000000000","message":"In add_volume_ace_rule function, you need to check access level. please see the following link: https://github.com/openstack/manila/blob/master/manila/common/constants.py#L127","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"4bf567f16cdd4cdfd90d6661440ed254fe7341eb","unresolved":false,"context_lines":[{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":253,"context_line":"        try:"},{"line_number":254,"context_line":"            self._maprfs_util.add_volume_ace_rule(volume_name, access)"},{"line_number":255,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":256,"context_line":"            msg \u003d (_(\u0027Failed to allow access for share %(name)s. \u0027"},{"line_number":257,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_fe474ca0","line":254,"range":{"start_line":254,"start_character":30,"end_line":254,"end_character":70},"in_reply_to":"bacf61ea_ea55e0f9","updated":"2016-08-06 06:50:39.000000000","message":"Do you mean, that driver should raise InvalidShareAccess if access  has unsupported access level (differ from \u0027rw\u0027 and \u0027ro\u0027)? Currently there are no such levels, so it just set Read ACE if \u0027ro\u0027 level, and Write ACE if \u0027rw\u0027.","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                      delete_rules, share_server\u003dNone):"},{"line_number":279,"context_line":"        \"\"\"Update access rules for given share.\"\"\""},{"line_number":280,"context_line":"        for access in access_rules:"},{"line_number":281,"context_line":"            if access[\u0027access_type\u0027] !\u003d \u0027user\u0027:"},{"line_number":282,"context_line":"                msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":283,"context_line":"                LOG.error(msg)"},{"line_number":284,"context_line":"                raise exception.InvalidShareAccess(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_4b105500","line":281,"range":{"start_line":281,"start_character":15,"end_line":281,"end_character":36},"updated":"2016-08-06 23:00:44.000000000","message":".lower() for resiliency.","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                      delete_rules, share_server\u003dNone):"},{"line_number":279,"context_line":"        \"\"\"Update access rules for given share.\"\"\""},{"line_number":280,"context_line":"        for access in access_rules:"},{"line_number":281,"context_line":"            if access[\u0027access_type\u0027] !\u003d \u0027user\u0027:"},{"line_number":282,"context_line":"                msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":283,"context_line":"                LOG.error(msg)"},{"line_number":284,"context_line":"                raise exception.InvalidShareAccess(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_e62b0493","line":281,"range":{"start_line":281,"start_character":15,"end_line":281,"end_character":36},"in_reply_to":"bacf61ea_4b105500","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"a8f8c1ba9a7e436c529216a8759453eba0041793","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            if access[\u0027access_type\u0027] !\u003d \u0027user\u0027:"},{"line_number":282,"context_line":"                msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":283,"context_line":"                LOG.error(msg)"},{"line_number":284,"context_line":"                raise exception.InvalidShareAccess(msg)"},{"line_number":285,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            # \u0027update_access\u0027 is called before share is removed, so this"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_87d89d54","line":284,"range":{"start_line":284,"start_character":32,"end_line":284,"end_character":55},"updated":"2016-08-05 16:09:20.000000000","message":"InvalidShareAccess(reason\u003dmsg)","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            if access[\u0027access_type\u0027] !\u003d \u0027user\u0027:"},{"line_number":282,"context_line":"                msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":283,"context_line":"                LOG.error(msg)"},{"line_number":284,"context_line":"                raise exception.InvalidShareAccess(msg)"},{"line_number":285,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            # \u0027update_access\u0027 is called before share is removed, so this"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_c62400c8","line":284,"range":{"start_line":284,"start_character":32,"end_line":284,"end_character":55},"in_reply_to":"bacf61ea_87d89d54","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"d463427a87b52b5278c4d991c5c3e6c6c631d5ed","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    def update_access(self, context, share, access_rules, add_rules,"},{"line_number":278,"context_line":"                      delete_rules, share_server\u003dNone):"},{"line_number":279,"context_line":"        \"\"\"Update access rules for given share.\"\"\""},{"line_number":280,"context_line":"        for access in access_rules:"},{"line_number":281,"context_line":"            if access[\u0027access_type\u0027] !\u003d \u0027user\u0027:"},{"line_number":282,"context_line":"                msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":283,"context_line":"                LOG.error(msg)"},{"line_number":284,"context_line":"                raise exception.InvalidShareAccess(msg)"},{"line_number":285,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            # \u0027update_access\u0027 is called before share is removed, so this"},{"line_number":288,"context_line":"            #  method shouldn`t raise exception if share does"},{"line_number":289,"context_line":"            #  not exist actually"},{"line_number":290,"context_line":"            if not self._maprfs_util.volume_exist(volume_name):"},{"line_number":291,"context_line":"                return"},{"line_number":292,"context_line":"            # check update"},{"line_number":293,"context_line":"            if not add_rules and not delete_rules:"},{"line_number":294,"context_line":"                self._maprfs_util.set_volume_ace(volume_name, access_rules)"},{"line_number":295,"context_line":"            else:"},{"line_number":296,"context_line":"                self._maprfs_util.add_volume_ace_rules(volume_name, add_rules)"},{"line_number":297,"context_line":"                self._maprfs_util.remove_volume_ace_rules(volume_name,"},{"line_number":298,"context_line":"                                                          delete_rules)"},{"line_number":299,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":300,"context_line":"            msg \u003d (_(\u0027Failed to update access for share %(name)s. \u0027"},{"line_number":301,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":302,"context_line":"                   {\u0027name\u0027: share[\u0027name\u0027],"},{"line_number":303,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":304,"context_line":"            LOG.error(msg)"},{"line_number":305,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":308,"context_line":"        \"\"\"Extend share storage.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_46839956","line":305,"range":{"start_line":280,"start_character":6,"end_line":305,"end_character":48},"updated":"2016-08-10 07:15:15.000000000","message":"unit test missing","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    def update_access(self, context, share, access_rules, add_rules,"},{"line_number":278,"context_line":"                      delete_rules, share_server\u003dNone):"},{"line_number":279,"context_line":"        \"\"\"Update access rules for given share.\"\"\""},{"line_number":280,"context_line":"        for access in access_rules:"},{"line_number":281,"context_line":"            if access[\u0027access_type\u0027] !\u003d \u0027user\u0027:"},{"line_number":282,"context_line":"                msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":283,"context_line":"                LOG.error(msg)"},{"line_number":284,"context_line":"                raise exception.InvalidShareAccess(msg)"},{"line_number":285,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":286,"context_line":"        try:"},{"line_number":287,"context_line":"            # \u0027update_access\u0027 is called before share is removed, so this"},{"line_number":288,"context_line":"            #  method shouldn`t raise exception if share does"},{"line_number":289,"context_line":"            #  not exist actually"},{"line_number":290,"context_line":"            if not self._maprfs_util.volume_exist(volume_name):"},{"line_number":291,"context_line":"                return"},{"line_number":292,"context_line":"            # check update"},{"line_number":293,"context_line":"            if not add_rules and not delete_rules:"},{"line_number":294,"context_line":"                self._maprfs_util.set_volume_ace(volume_name, access_rules)"},{"line_number":295,"context_line":"            else:"},{"line_number":296,"context_line":"                self._maprfs_util.add_volume_ace_rules(volume_name, add_rules)"},{"line_number":297,"context_line":"                self._maprfs_util.remove_volume_ace_rules(volume_name,"},{"line_number":298,"context_line":"                                                          delete_rules)"},{"line_number":299,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":300,"context_line":"            msg \u003d (_(\u0027Failed to update access for share %(name)s. \u0027"},{"line_number":301,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":302,"context_line":"                   {\u0027name\u0027: share[\u0027name\u0027],"},{"line_number":303,"context_line":"                    \u0027excmsg\u0027: six.text_type(e)})"},{"line_number":304,"context_line":"            LOG.error(msg)"},{"line_number":305,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":308,"context_line":"        \"\"\"Extend share storage.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_863a08e6","line":305,"range":{"start_line":280,"start_character":6,"end_line":305,"end_character":48},"in_reply_to":"9ad45d7e_46839956","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":357,"context_line":"        total_capacity_gb \u003d math.ceil(total / units.Gi)"},{"line_number":358,"context_line":"        free_capacity_gb \u003d math.ceil(free / units.Gi)"},{"line_number":359,"context_line":"        data \u003d dict("},{"line_number":360,"context_line":"            share_backend_name\u003dself.backend_name,"},{"line_number":361,"context_line":"            storage_protocol\u003d\u0027MAPRFS\u0027,"},{"line_number":362,"context_line":"            driver_handles_share_servers\u003dself.driver_handles_share_servers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_e39fadb1","line":359,"range":{"start_line":359,"start_character":15,"end_line":359,"end_character":20},"updated":"2016-08-06 23:00:44.000000000","message":"{}","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":356,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":357,"context_line":"        total_capacity_gb \u003d math.ceil(total / units.Gi)"},{"line_number":358,"context_line":"        free_capacity_gb \u003d math.ceil(free / units.Gi)"},{"line_number":359,"context_line":"        data \u003d dict("},{"line_number":360,"context_line":"            share_backend_name\u003dself.backend_name,"},{"line_number":361,"context_line":"            storage_protocol\u003d\u0027MAPRFS\u0027,"},{"line_number":362,"context_line":"            driver_handles_share_servers\u003dself.driver_handles_share_servers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_6616f456","line":359,"range":{"start_line":359,"start_character":15,"end_line":359,"end_character":20},"in_reply_to":"bacf61ea_e39fadb1","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            share_backend_name\u003dself.backend_name,"},{"line_number":361,"context_line":"            storage_protocol\u003d\u0027MAPRFS\u0027,"},{"line_number":362,"context_line":"            driver_handles_share_servers\u003dself.driver_handles_share_servers,"},{"line_number":363,"context_line":"            vendor_name\u003d\u0027Open Source\u0027,"},{"line_number":364,"context_line":"            driver_version\u003d\u00271.0\u0027,"},{"line_number":365,"context_line":"            total_capacity_gb\u003dtotal_capacity_gb,"},{"line_number":366,"context_line":"            free_capacity_gb\u003dfree_capacity_gb,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_ebef89e6","line":363,"range":{"start_line":363,"start_character":25,"end_line":363,"end_character":36},"updated":"2016-08-06 23:00:44.000000000","message":"https://en.wikipedia.org/wiki/MapR_FS says this is a proprietary clustered file system technology.. Don\u0027t you mean MapR Technologies?","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":18793,"name":"Grigoriy Rozhkov","email":"groghkov@maprtech.com","username":"groghkov"},"change_message_id":"3157208ffcf5879a90d890e38266f74b3e74bdec","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            share_backend_name\u003dself.backend_name,"},{"line_number":361,"context_line":"            storage_protocol\u003d\u0027MAPRFS\u0027,"},{"line_number":362,"context_line":"            driver_handles_share_servers\u003dself.driver_handles_share_servers,"},{"line_number":363,"context_line":"            vendor_name\u003d\u0027Open Source\u0027,"},{"line_number":364,"context_line":"            driver_version\u003d\u00271.0\u0027,"},{"line_number":365,"context_line":"            total_capacity_gb\u003dtotal_capacity_gb,"},{"line_number":366,"context_line":"            free_capacity_gb\u003dfree_capacity_gb,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9ad45d7e_06061820","line":363,"range":{"start_line":363,"start_character":25,"end_line":363,"end_character":36},"in_reply_to":"bacf61ea_ebef89e6","updated":"2016-08-12 17:50:14.000000000","message":"Done","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                   {\u0027share_name\u0027: share[\u0027name\u0027],"},{"line_number":158,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":159,"context_line":"            LOG.error(msg)"},{"line_number":160,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def get_network_allocations_number(self):"},{"line_number":163,"context_line":"        return 0"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_b851f6da","line":160,"range":{"start_line":160,"start_character":28,"end_line":160,"end_character":48},"updated":"2016-08-16 08:08:06.000000000","message":"MapRFSException(msg\u003dmsg)","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        volume_name \u003d self._get_volume_name(share[\u0027name\u0027])"},{"line_number":175,"context_line":"        if self._maprfs_util.volume_exist(volume_name):"},{"line_number":176,"context_line":"            return self._get_share_export_locations(share)"},{"line_number":177,"context_line":"        else:"},{"line_number":178,"context_line":"            return \"ERROR\""},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":181,"context_line":"                                   share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_58b1e2e0","line":178,"range":{"start_line":177,"start_character":8,"end_line":178,"end_character":26},"updated":"2016-08-16 08:08:06.000000000","message":"\"return None or list with export locations.\"\nIf the volume is not exist, you could just raise ShareResourceNotFound.\n\nhttps://github.com/openstack/manila/blob/master/manila/share/driver.py#L486","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                _(\u0027Failed to create share from snapshot %(snapshot_name)s \u0027"},{"line_number":192,"context_line":"                  \u0027with name %(share_name)s. Error: %(excmsg)s.\u0027) %"},{"line_number":193,"context_line":"                {\u0027snapshot_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":194,"context_line":"                 \u0027share_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":195,"context_line":"                 \u0027excmsg\u0027: e})"},{"line_number":196,"context_line":"            LOG.error(msg)"},{"line_number":197,"context_line":"            raise exception.MapRFSException(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_580d628f","line":194,"range":{"start_line":194,"start_character":40,"end_line":194,"end_character":46},"updated":"2016-08-16 08:08:06.000000000","message":"share_name","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                 \u0027share_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":195,"context_line":"                 \u0027excmsg\u0027: e})"},{"line_number":196,"context_line":"            LOG.error(msg)"},{"line_number":197,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":198,"context_line":"        return self._get_share_export_locations(share)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_58428211","line":197,"range":{"start_line":197,"start_character":28,"end_line":197,"end_character":48},"updated":"2016-08-16 08:08:06.000000000","message":"MapRFSException(msg\u003dmsg)","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            msg \u003d (_(\u0027Failed to create snapshot %(snapshot_name)s for \u0027"},{"line_number":209,"context_line":"                     \u0027the share %(share_name)s. Error: %(excmsg)s.\u0027) %"},{"line_number":210,"context_line":"                   {\u0027snapshot_name\u0027: snapshot_name,"},{"line_number":211,"context_line":"                    \u0027share_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":212,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":213,"context_line":"            LOG.error(msg)"},{"line_number":214,"context_line":"            raise exception.MapRFSException(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_f807ee7e","line":211,"range":{"start_line":211,"start_character":34,"end_line":211,"end_character":50},"updated":"2016-08-16 08:08:06.000000000","message":"share_name","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                    \u0027share_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":212,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":213,"context_line":"            LOG.error(msg)"},{"line_number":214,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":217,"context_line":"        \"\"\"Deletes share storage.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_f83a4e97","line":214,"range":{"start_line":214,"start_character":28,"end_line":214,"end_character":48},"updated":"2016-08-16 08:08:06.000000000","message":"MapRFSException(msg\u003dmsg)","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":236,"context_line":"            msg \u003d (_(\u0027Failed to delete snapshot %(snapshot_name)s. \u0027"},{"line_number":237,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":238,"context_line":"                   {\u0027snapshot_name\u0027: snapshot[\u0027name\u0027],"},{"line_number":239,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":240,"context_line":"            LOG.error(msg)"},{"line_number":241,"context_line":"            raise exception.MapRFSException(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_b81c56c2","line":238,"range":{"start_line":238,"start_character":46,"end_line":238,"end_character":52},"updated":"2016-08-16 08:08:06.000000000","message":"share_name","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":257,"context_line":"                   {\u0027name\u0027: share[\u0027name\u0027],"},{"line_number":258,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":259,"context_line":"            LOG.error(msg)"},{"line_number":260,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):"},{"line_number":263,"context_line":"        \"\"\"Deny access to the share.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_f8636e3f","line":260,"range":{"start_line":260,"start_character":28,"end_line":260,"end_character":48},"updated":"2016-08-16 08:08:06.000000000","message":"MapRFSException(msg\u003dmsg)","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                   {\u0027name\u0027: share[\u0027name\u0027],"},{"line_number":272,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":273,"context_line":"            LOG.error(msg)"},{"line_number":274,"context_line":"            raise exception.MapRFSException(msg)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def update_access(self, context, share, access_rules, add_rules,"},{"line_number":277,"context_line":"                      delete_rules, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_585ba287","line":274,"range":{"start_line":274,"start_character":28,"end_line":274,"end_character":48},"updated":"2016-08-16 08:08:06.000000000","message":"MapRFSException(msg\u003dmsg)","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            #  method shouldn`t raise exception if share does"},{"line_number":289,"context_line":"            #  not exist actually"},{"line_number":290,"context_line":"            if not self._maprfs_util.volume_exist(volume_name):"},{"line_number":291,"context_line":"                return"},{"line_number":292,"context_line":"            # check update"},{"line_number":293,"context_line":"            if not add_rules and not delete_rules:"},{"line_number":294,"context_line":"                self._maprfs_util.set_volume_ace(volume_name, access_rules)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_b8029609","line":291,"range":{"start_line":291,"start_character":16,"end_line":291,"end_character":22},"updated":"2016-08-16 08:08:06.000000000","message":"It could add the log.warning(_LW(\u0027Can not get share %s.\u0027), share[\u0027name\u0027])","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"e96f6eb935d99dc16a9dd177fcf1d3bd157467ed","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            if not self._maprfs_util.volume_exist(volume_name):"},{"line_number":291,"context_line":"                return"},{"line_number":292,"context_line":"            # check update"},{"line_number":293,"context_line":"            if not add_rules and not delete_rules:"},{"line_number":294,"context_line":"                self._maprfs_util.set_volume_ace(volume_name, access_rules)"},{"line_number":295,"context_line":"            else:"},{"line_number":296,"context_line":"                self._maprfs_util.add_volume_ace_rules(volume_name, add_rules)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ac371cc_be4d5f74","line":293,"range":{"start_line":293,"start_character":12,"end_line":293,"end_character":50},"updated":"2016-08-16 08:08:06.000000000","message":"if not (add_rules or delete_rules):","commit_id":"f953ec4356cc2497885cfb66beee5c2f6f45e9c9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f55307aecdd9030243eef414737c36087cd96802","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            LOG.error(msg)"},{"line_number":293,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):"},{"line_number":296,"context_line":"        \"\"\"Allow access to the share.\"\"\""},{"line_number":297,"context_line":"        if access[\u0027access_type\u0027].lower() !\u003d \u0027user\u0027:"},{"line_number":298,"context_line":"            msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":299,"context_line":"            LOG.error(msg)"},{"line_number":300,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        volume_name \u003d self._get_volume_name(context, share)"},{"line_number":303,"context_line":"        try:"},{"line_number":304,"context_line":"            self._maprfs_util.add_volume_ace_rule(volume_name, access)"},{"line_number":305,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":306,"context_line":"            msg \u003d (_(\u0027Failed to allow access for share %(name)s. \u0027"},{"line_number":307,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":308,"context_line":"                   {\u0027name\u0027: share[\u0027name\u0027],"},{"line_number":309,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":310,"context_line":"            LOG.error(msg)"},{"line_number":311,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):"},{"line_number":314,"context_line":"        \"\"\"Deny access to the share.\"\"\""},{"line_number":315,"context_line":"        volume_name \u003d self._get_volume_name(context, share)"},{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            self._maprfs_util.remove_volume_ace_rule(volume_name,"},{"line_number":318,"context_line":"                                                     access)"},{"line_number":319,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":320,"context_line":"            msg \u003d (_(\u0027Failed to deny access for share %(name)s. \u0027"},{"line_number":321,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":322,"context_line":"                   {\u0027name\u0027: share[\u0027name\u0027],"},{"line_number":323,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":324,"context_line":"            LOG.error(msg)"},{"line_number":325,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def update_access(self, context, share, access_rules, add_rules,"},{"line_number":328,"context_line":"                      delete_rules, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_c144feb8","line":325,"range":{"start_line":295,"start_character":0,"end_line":325,"end_character":52},"updated":"2016-12-20 01:32:04.000000000","message":"We\u0027ve deprecated these methods for removal. implementing the update_access method is sufficient.","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b7cb50451426a9a076a5f7ec96e2fed358989925","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            LOG.error(msg)"},{"line_number":293,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):"},{"line_number":296,"context_line":"        \"\"\"Allow access to the share.\"\"\""},{"line_number":297,"context_line":"        if access[\u0027access_type\u0027].lower() !\u003d \u0027user\u0027:"},{"line_number":298,"context_line":"            msg \u003d _(\"Only \u0027user\u0027 access type allowed!\")"},{"line_number":299,"context_line":"            LOG.error(msg)"},{"line_number":300,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        volume_name \u003d self._get_volume_name(context, share)"},{"line_number":303,"context_line":"        try:"},{"line_number":304,"context_line":"            self._maprfs_util.add_volume_ace_rule(volume_name, access)"},{"line_number":305,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":306,"context_line":"            msg \u003d (_(\u0027Failed to allow access for share %(name)s. \u0027"},{"line_number":307,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":308,"context_line":"                   {\u0027name\u0027: share[\u0027name\u0027],"},{"line_number":309,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":310,"context_line":"            LOG.error(msg)"},{"line_number":311,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):"},{"line_number":314,"context_line":"        \"\"\"Deny access to the share.\"\"\""},{"line_number":315,"context_line":"        volume_name \u003d self._get_volume_name(context, share)"},{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            self._maprfs_util.remove_volume_ace_rule(volume_name,"},{"line_number":318,"context_line":"                                                     access)"},{"line_number":319,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":320,"context_line":"            msg \u003d (_(\u0027Failed to deny access for share %(name)s. \u0027"},{"line_number":321,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"},{"line_number":322,"context_line":"                   {\u0027name\u0027: share[\u0027name\u0027],"},{"line_number":323,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":324,"context_line":"            LOG.error(msg)"},{"line_number":325,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def update_access(self, context, share, access_rules, add_rules,"},{"line_number":328,"context_line":"                      delete_rules, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_2be648b4","line":325,"range":{"start_line":295,"start_character":0,"end_line":325,"end_character":52},"in_reply_to":"1a6eadb0_c144feb8","updated":"2016-12-20 16:28:47.000000000","message":"Done","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f55307aecdd9030243eef414737c36087cd96802","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            msg \u003d _(\u0027Failed to check MapRFS capacity info. Error: %s.\u0027) % e"},{"line_number":467,"context_line":"            LOG.error(msg)"},{"line_number":468,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":469,"context_line":"        total_capacity_gb \u003d total // units.Gi + 1"},{"line_number":470,"context_line":"        free_capacity_gb \u003d free // units.Gi + 1"},{"line_number":471,"context_line":"        data \u003d {"},{"line_number":472,"context_line":"            \u0027share_backend_name\u0027: self.backend_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_81684623","line":469,"range":{"start_line":469,"start_character":28,"end_line":469,"end_character":49},"updated":"2016-12-20 01:32:04.000000000","message":"Use math.ceil instead","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b7cb50451426a9a076a5f7ec96e2fed358989925","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            msg \u003d _(\u0027Failed to check MapRFS capacity info. Error: %s.\u0027) % e"},{"line_number":467,"context_line":"            LOG.error(msg)"},{"line_number":468,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":469,"context_line":"        total_capacity_gb \u003d total // units.Gi + 1"},{"line_number":470,"context_line":"        free_capacity_gb \u003d free // units.Gi + 1"},{"line_number":471,"context_line":"        data \u003d {"},{"line_number":472,"context_line":"            \u0027share_backend_name\u0027: self.backend_name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_1e4c686f","line":469,"range":{"start_line":469,"start_character":28,"end_line":469,"end_character":49},"in_reply_to":"1a6eadb0_81684623","updated":"2016-12-20 16:28:47.000000000","message":"I`m not sure that math.ceil can be used. For example:\n1080//1024 + 1 \u003d 2 (as expected) \nmath.ceil(1080/1024) \u003d 1\n\u0027total\u0027 is int value, so math.ceil is not applicable here.","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f55307aecdd9030243eef414737c36087cd96802","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            LOG.error(msg)"},{"line_number":468,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":469,"context_line":"        total_capacity_gb \u003d total // units.Gi + 1"},{"line_number":470,"context_line":"        free_capacity_gb \u003d free // units.Gi + 1"},{"line_number":471,"context_line":"        data \u003d {"},{"line_number":472,"context_line":"            \u0027share_backend_name\u0027: self.backend_name,"},{"line_number":473,"context_line":"            \u0027storage_protocol\u0027: \u0027MAPRFS\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_a1770201","line":470,"range":{"start_line":470,"start_character":27,"end_line":470,"end_character":47},"updated":"2016-12-20 01:32:04.000000000","message":"same","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f55307aecdd9030243eef414737c36087cd96802","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            \u0027driver_version\u0027: \u00271.0\u0027,"},{"line_number":477,"context_line":"            \u0027total_capacity_gb\u0027: total_capacity_gb,"},{"line_number":478,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":479,"context_line":"            \u0027snapshot_support\u0027: True"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        super(MapRFSNativeShareDriver, self)._update_share_stats(data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_61540a54","line":479,"range":{"start_line":479,"start_character":0,"end_line":479,"end_character":36},"updated":"2016-12-20 01:32:04.000000000","message":"add trailing comma","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b7cb50451426a9a076a5f7ec96e2fed358989925","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            \u0027driver_version\u0027: \u00271.0\u0027,"},{"line_number":477,"context_line":"            \u0027total_capacity_gb\u0027: total_capacity_gb,"},{"line_number":478,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":479,"context_line":"            \u0027snapshot_support\u0027: True"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        super(MapRFSNativeShareDriver, self)._update_share_stats(data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_4be1c499","line":479,"range":{"start_line":479,"start_character":0,"end_line":479,"end_character":36},"in_reply_to":"1a6eadb0_61540a54","updated":"2016-12-20 16:28:47.000000000","message":"Done","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f55307aecdd9030243eef414737c36087cd96802","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            \u0027total_capacity_gb\u0027: total_capacity_gb,"},{"line_number":478,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":479,"context_line":"            \u0027snapshot_support\u0027: True"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        super(MapRFSNativeShareDriver, self)._update_share_stats(data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_c1495eb9","line":480,"range":{"start_line":480,"start_character":8,"end_line":480,"end_character":9},"updated":"2016-12-20 01:32:04.000000000","message":"Does this backend support storage pools?","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b7cb50451426a9a076a5f7ec96e2fed358989925","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            \u0027total_capacity_gb\u0027: total_capacity_gb,"},{"line_number":478,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":479,"context_line":"            \u0027snapshot_support\u0027: True"},{"line_number":480,"context_line":"        }"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        super(MapRFSNativeShareDriver, self)._update_share_stats(data)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_8b667c27","line":480,"range":{"start_line":480,"start_character":8,"end_line":480,"end_character":9},"in_reply_to":"1a6eadb0_c1495eb9","updated":"2016-12-20 16:28:47.000000000","message":"No,driver does not handle storage backend.","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d9f5681480f61095be56885dd58d193610cb486f","unresolved":false,"context_lines":[{"line_number":311,"context_line":"            # check update"},{"line_number":312,"context_line":"            if add_rules or delete_rules:"},{"line_number":313,"context_line":"                self._maprfs_util.add_volume_ace_rules(volume_name, add_rules)"},{"line_number":314,"context_line":"                self._maprfs_util.remove_volume_ace_rules(volume_name,"},{"line_number":315,"context_line":"                                                          delete_rules)"},{"line_number":316,"context_line":"            else:"},{"line_number":317,"context_line":"                self._maprfs_util.set_volume_ace(volume_name, access_rules)"},{"line_number":318,"context_line":"        except exception.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_772f3a3e","line":315,"range":{"start_line":314,"start_character":16,"end_line":315,"end_character":71},"updated":"2016-12-20 19:11:11.000000000","message":"remove before adding, as a rule may end up being removed after being added","commit_id":"ff7022718a3edd6e770a82a72ee757622440d6d2"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"e074a4ce565fd99f0509b0ded7e569d7e338c927","unresolved":false,"context_lines":[{"line_number":311,"context_line":"            # check update"},{"line_number":312,"context_line":"            if add_rules or delete_rules:"},{"line_number":313,"context_line":"                self._maprfs_util.add_volume_ace_rules(volume_name, add_rules)"},{"line_number":314,"context_line":"                self._maprfs_util.remove_volume_ace_rules(volume_name,"},{"line_number":315,"context_line":"                                                          delete_rules)"},{"line_number":316,"context_line":"            else:"},{"line_number":317,"context_line":"                self._maprfs_util.set_volume_ace(volume_name, access_rules)"},{"line_number":318,"context_line":"        except exception.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_4bbc576c","line":315,"range":{"start_line":314,"start_character":16,"end_line":315,"end_character":71},"in_reply_to":"1a6eadb0_772f3a3e","updated":"2016-12-20 21:21:33.000000000","message":"Done","commit_id":"ff7022718a3edd6e770a82a72ee757622440d6d2"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d9f5681480f61095be56885dd58d193610cb486f","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                self._maprfs_util.remove_volume_ace_rules(volume_name,"},{"line_number":315,"context_line":"                                                          delete_rules)"},{"line_number":316,"context_line":"            else:"},{"line_number":317,"context_line":"                self._maprfs_util.set_volume_ace(volume_name, access_rules)"},{"line_number":318,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":319,"context_line":"            msg \u003d (_(\u0027Failed to update access for share %(name)s. \u0027"},{"line_number":320,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_d7ce4e82","line":317,"range":{"start_line":317,"start_character":16,"end_line":317,"end_character":75},"updated":"2016-12-20 19:11:11.000000000","message":"if your driver/backend supports adding all rules atomically and your backend can do this efficiently, you can disregard the above comment and above approach of adding/remove rules individually, as the \"access_rules\" variable will contain all access rules that your backend should have, so it would be more efficient to always do this instead of adding/removing per request","commit_id":"ff7022718a3edd6e770a82a72ee757622440d6d2"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"e074a4ce565fd99f0509b0ded7e569d7e338c927","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                self._maprfs_util.remove_volume_ace_rules(volume_name,"},{"line_number":315,"context_line":"                                                          delete_rules)"},{"line_number":316,"context_line":"            else:"},{"line_number":317,"context_line":"                self._maprfs_util.set_volume_ace(volume_name, access_rules)"},{"line_number":318,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":319,"context_line":"            msg \u003d (_(\u0027Failed to update access for share %(name)s. \u0027"},{"line_number":320,"context_line":"                     \u0027Error: %(excmsg)s.\u0027) %"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_4b31b70a","line":317,"range":{"start_line":317,"start_character":16,"end_line":317,"end_character":75},"in_reply_to":"1a6eadb0_d7ce4e82","updated":"2016-12-20 21:21:33.000000000","message":"My backend supports adding all rules atomically, but I believe driver should have ability to add/remove rule without affecting on existing rules.","commit_id":"ff7022718a3edd6e770a82a72ee757622440d6d2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a0acdb23f5eb12d86fd36b5af5692e73039093c3","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Share driver for MapR-FS distributed file system."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"from distutils.util import strtobool"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_3d63dc1b","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":36},"updated":"2016-12-20 23:13:04.000000000","message":"Please use oslo_utils\u0027s bool_from_string method\n\nfrom olso_utils import strutils\n\nstrutils.bool_from_string","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"c64058216540cfc41169a70deab20f90501c5d77","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Share driver for MapR-FS distributed file system."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"from distutils.util import strtobool"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_config import cfg"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_4d3fe1b3","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":36},"in_reply_to":"1a6eadb0_3d63dc1b","updated":"2016-12-21 16:31:42.000000000","message":"Done","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d5d7b34416383c71355d584ebde575f3aa1e416d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    cfg.ListOpt(\u0027maprfs_cldb_ip\u0027,"},{"line_number":59,"context_line":"                help\u003d\u0027The list of IPs or hostnames of CLDB nodes.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027maprfs_rename_managed_volume\u0027, default\u003dTrue,"},{"line_number":61,"context_line":"                help\u003d\u0027Specify whether existing volume should be rename when\u0027"},{"line_number":62,"context_line":"                     \u0027 start managing\u0027)"},{"line_number":63,"context_line":"]"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_3d2bdcec","line":61,"range":{"start_line":61,"start_character":64,"end_line":61,"end_character":70},"updated":"2016-12-20 23:08:21.000000000","message":"renamed","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"c64058216540cfc41169a70deab20f90501c5d77","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    cfg.ListOpt(\u0027maprfs_cldb_ip\u0027,"},{"line_number":59,"context_line":"                help\u003d\u0027The list of IPs or hostnames of CLDB nodes.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027maprfs_rename_managed_volume\u0027, default\u003dTrue,"},{"line_number":61,"context_line":"                help\u003d\u0027Specify whether existing volume should be rename when\u0027"},{"line_number":62,"context_line":"                     \u0027 start managing\u0027)"},{"line_number":63,"context_line":"]"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_8d457944","line":61,"range":{"start_line":61,"start_character":64,"end_line":61,"end_character":70},"in_reply_to":"1a6eadb0_3d2bdcec","updated":"2016-12-21 16:31:42.000000000","message":"Done","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d5d7b34416383c71355d584ebde575f3aa1e416d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                help\u003d\u0027The list of IPs or hostnames of CLDB nodes.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027maprfs_rename_managed_volume\u0027, default\u003dTrue,"},{"line_number":61,"context_line":"                help\u003d\u0027Specify whether existing volume should be rename when\u0027"},{"line_number":62,"context_line":"                     \u0027 start managing\u0027)"},{"line_number":63,"context_line":"]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_5d2ed8fa","line":62,"range":{"start_line":62,"start_character":29,"end_line":62,"end_character":37},"updated":"2016-12-20 23:08:21.000000000","message":"missing trailing period.","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"c64058216540cfc41169a70deab20f90501c5d77","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                help\u003d\u0027The list of IPs or hostnames of CLDB nodes.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027maprfs_rename_managed_volume\u0027, default\u003dTrue,"},{"line_number":61,"context_line":"                help\u003d\u0027Specify whether existing volume should be rename when\u0027"},{"line_number":62,"context_line":"                     \u0027 start managing\u0027)"},{"line_number":63,"context_line":"]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_ad74f59b","line":62,"range":{"start_line":62,"start_character":29,"end_line":62,"end_character":37},"in_reply_to":"1a6eadb0_5d2ed8fa","updated":"2016-12-21 16:31:42.000000000","message":"Done","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d5d7b34416383c71355d584ebde575f3aa1e416d","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            \u0027id\u0027: snapshot[\u0027share_instance\u0027][\u0027share_id\u0027]}).get(\u0027_tenantuser\u0027)"},{"line_number":221,"context_line":"        if sn_share_tenant and sn_share_tenant !\u003d metadata.get(\u0027_tenantuser\u0027):"},{"line_number":222,"context_line":"            msg \u003d ("},{"line_number":223,"context_line":"                _(\u0027Can not create share from snapshot %(snapshot_name)s \u0027"},{"line_number":224,"context_line":"                  \u0027with name %(share_name)s. Error: Tenant user should not \u0027"},{"line_number":225,"context_line":"                  \u0027differ from tenant of the source snapshot.\u0027) %"},{"line_number":226,"context_line":"                {\u0027snapshot_name\u0027: snapshot[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_7d8394cc","line":223,"range":{"start_line":223,"start_character":22,"end_line":223,"end_character":23},"updated":"2016-12-20 23:08:21.000000000","message":"remove space","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"c64058216540cfc41169a70deab20f90501c5d77","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            \u0027id\u0027: snapshot[\u0027share_instance\u0027][\u0027share_id\u0027]}).get(\u0027_tenantuser\u0027)"},{"line_number":221,"context_line":"        if sn_share_tenant and sn_share_tenant !\u003d metadata.get(\u0027_tenantuser\u0027):"},{"line_number":222,"context_line":"            msg \u003d ("},{"line_number":223,"context_line":"                _(\u0027Can not create share from snapshot %(snapshot_name)s \u0027"},{"line_number":224,"context_line":"                  \u0027with name %(share_name)s. Error: Tenant user should not \u0027"},{"line_number":225,"context_line":"                  \u0027differ from tenant of the source snapshot.\u0027) %"},{"line_number":226,"context_line":"                {\u0027snapshot_name\u0027: snapshot[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_0d7089a3","line":223,"range":{"start_line":223,"start_character":22,"end_line":223,"end_character":23},"in_reply_to":"1a6eadb0_7d8394cc","updated":"2016-12-21 16:31:42.000000000","message":"Done","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a0acdb23f5eb12d86fd36b5af5692e73039093c3","unresolved":false,"context_lines":[{"line_number":371,"context_line":"    def manage_existing(self, share, driver_options):"},{"line_number":372,"context_line":"        try:"},{"line_number":373,"context_line":"            info \u003d self._maprfs_util.get_volume_info_by_path("},{"line_number":374,"context_line":"                share[\u0027export_location\u0027], check_if_exist\u003dTrue)"},{"line_number":375,"context_line":"            if not info:"},{"line_number":376,"context_line":"                msg \u003d _(\"Share %s not found\") % share["},{"line_number":377,"context_line":"                    \u0027export_location\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_bdb0cc8c","line":374,"range":{"start_line":374,"start_character":42,"end_line":374,"end_character":56},"updated":"2016-12-20 23:13:04.000000000","message":"check_if_exists \n\n\nThis is one reason to write unit tests :) \n\nhttp://logs.openstack.org/35/350035/11/check/gate-manila-pylint-ubuntu-xenial/a6c97f6/console.html","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"c64058216540cfc41169a70deab20f90501c5d77","unresolved":false,"context_lines":[{"line_number":371,"context_line":"    def manage_existing(self, share, driver_options):"},{"line_number":372,"context_line":"        try:"},{"line_number":373,"context_line":"            info \u003d self._maprfs_util.get_volume_info_by_path("},{"line_number":374,"context_line":"                share[\u0027export_location\u0027], check_if_exist\u003dTrue)"},{"line_number":375,"context_line":"            if not info:"},{"line_number":376,"context_line":"                msg \u003d _(\"Share %s not found\") % share["},{"line_number":377,"context_line":"                    \u0027export_location\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_2d69c5be","line":374,"range":{"start_line":374,"start_character":42,"end_line":374,"end_character":56},"in_reply_to":"1a6eadb0_bdb0cc8c","updated":"2016-12-21 16:31:42.000000000","message":"Done","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d5d7b34416383c71355d584ebde575f3aa1e416d","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            if should_rename:"},{"line_number":388,"context_line":"                self._maprfs_util.rename_volume(volume_name, share[\u0027name\u0027])"},{"line_number":389,"context_line":"            else:"},{"line_number":390,"context_line":"                self.api.update_share_metadata(context.get_admin_context(),"},{"line_number":391,"context_line":"                                               {\u0027id\u0027: share[\u0027share_id\u0027]},"},{"line_number":392,"context_line":"                                               {\u0027_name\u0027: volume_name})"},{"line_number":393,"context_line":"            location \u003d self._get_share_export_locations(share, path\u003dshare.get("},{"line_number":394,"context_line":"                \u0027export_location\u0027))"},{"line_number":395,"context_line":"            if size \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_5df17869","line":392,"range":{"start_line":390,"start_character":0,"end_line":392,"end_character":70},"updated":"2016-12-20 23:08:21.000000000","message":"Users can change share metadata. Is this fine?","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"c64058216540cfc41169a70deab20f90501c5d77","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            if should_rename:"},{"line_number":388,"context_line":"                self._maprfs_util.rename_volume(volume_name, share[\u0027name\u0027])"},{"line_number":389,"context_line":"            else:"},{"line_number":390,"context_line":"                self.api.update_share_metadata(context.get_admin_context(),"},{"line_number":391,"context_line":"                                               {\u0027id\u0027: share[\u0027share_id\u0027]},"},{"line_number":392,"context_line":"                                               {\u0027_name\u0027: volume_name})"},{"line_number":393,"context_line":"            location \u003d self._get_share_export_locations(share, path\u003dshare.get("},{"line_number":394,"context_line":"                \u0027export_location\u0027))"},{"line_number":395,"context_line":"            if size \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_6d749dfd","line":392,"range":{"start_line":390,"start_character":0,"end_line":392,"end_character":70},"in_reply_to":"1a6eadb0_5df17869","updated":"2016-12-21 16:31:42.000000000","message":"Removing these properties from metadata will brake a share. So if user wants to keep custom share name, he has to consider it.  Such feature as custom share name is unsafe, but I would say it not recommended for use. I had to add this feature because it was required in some case.\nI would like not to use share metadata, but there is no other places for storing such data. I tried to use export location metadata, but unfortunately it is invisible for users.","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"8daa9a8fc711de46e36532b96da4f05a7f0371dd","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            msg \u003d _(\u0027Failed to check MapRFS capacity info. Error: %s.\u0027) % e"},{"line_number":435,"context_line":"            LOG.error(msg)"},{"line_number":436,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":437,"context_line":"        total_capacity_gb \u003d total // units.Gi + 1"},{"line_number":438,"context_line":"        free_capacity_gb \u003d free // units.Gi + 1"},{"line_number":439,"context_line":"        data \u003d {"},{"line_number":440,"context_line":"            \u0027share_backend_name\u0027: self.backend_name,"},{"line_number":441,"context_line":"            \u0027storage_protocol\u0027: \u0027MAPRFS\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_fddb2419","line":438,"range":{"start_line":437,"start_character":8,"end_line":438,"end_character":47},"updated":"2016-12-20 23:00:03.000000000","message":"What if total is a multiple of 1024 or free is 0?\n\n  total_capacity_gb \u003d int(math.ceil(float(total) / units.Gi))\n  free_capacity_gb \u003d int(math.floor(float(free) / units.Gi))\n\nwould be the better approximation ^","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"c64058216540cfc41169a70deab20f90501c5d77","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            msg \u003d _(\u0027Failed to check MapRFS capacity info. Error: %s.\u0027) % e"},{"line_number":435,"context_line":"            LOG.error(msg)"},{"line_number":436,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":437,"context_line":"        total_capacity_gb \u003d total // units.Gi + 1"},{"line_number":438,"context_line":"        free_capacity_gb \u003d free // units.Gi + 1"},{"line_number":439,"context_line":"        data \u003d {"},{"line_number":440,"context_line":"            \u0027share_backend_name\u0027: self.backend_name,"},{"line_number":441,"context_line":"            \u0027storage_protocol\u0027: \u0027MAPRFS\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_6d5f3d0f","line":438,"range":{"start_line":437,"start_character":8,"end_line":438,"end_character":47},"in_reply_to":"1a6eadb0_fddb2419","updated":"2016-12-21 16:31:42.000000000","message":"Done","commit_id":"0f2104403cda138f42acfb0a5ed2ccbcc319ab77"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"23af52d0783e7061bb81d85e0b19ce85730be284","unresolved":false,"context_lines":[{"line_number":445,"context_line":"            \u0027driver_version\u0027: \u00271.0\u0027,"},{"line_number":446,"context_line":"            \u0027total_capacity_gb\u0027: total_capacity_gb,"},{"line_number":447,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":448,"context_line":"            \u0027snapshot_support\u0027: True,"},{"line_number":449,"context_line":"        }"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"        super(MapRFSNativeShareDriver, self)._update_share_stats(data)"}],"source_content_type":"text/x-python","patch_set":14,"id":"da4df55a_d96adeb2","line":448,"range":{"start_line":448,"start_character":0,"end_line":448,"end_character":37},"updated":"2016-12-27 20:20:27.000000000","message":"\u0027create_share_from_snapshot_support\u0027: True,","commit_id":"f2ffdc91c5eda3162d04eef123322293974e4d29"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09931ad72f539b587d7978321fb10ad2c84af19e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                help\u003d\u0027The list of IPs or hostnames of ZooKeeper nodes.\u0027),"},{"line_number":59,"context_line":"    cfg.ListOpt(\u0027maprfs_cldb_ip\u0027,"},{"line_number":60,"context_line":"                help\u003d\u0027The list of IPs or hostnames of CLDB nodes.\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027maprfs_rename_managed_volume\u0027, default\u003dTrue,"},{"line_number":62,"context_line":"                help\u003d\u0027Specify whether existing volume should be renamed when\u0027"},{"line_number":63,"context_line":"                     \u0027 start managing.\u0027)"},{"line_number":64,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_a79c195e","line":61,"range":{"start_line":61,"start_character":47,"end_line":61,"end_character":61},"updated":"2017-01-04 21:59:44.000000000","message":"put this in the next line.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                help\u003d\u0027The list of IPs or hostnames of ZooKeeper nodes.\u0027),"},{"line_number":59,"context_line":"    cfg.ListOpt(\u0027maprfs_cldb_ip\u0027,"},{"line_number":60,"context_line":"                help\u003d\u0027The list of IPs or hostnames of CLDB nodes.\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027maprfs_rename_managed_volume\u0027, default\u003dTrue,"},{"line_number":62,"context_line":"                help\u003d\u0027Specify whether existing volume should be renamed when\u0027"},{"line_number":63,"context_line":"                     \u0027 start managing.\u0027)"},{"line_number":64,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_c3c81bab","line":61,"range":{"start_line":61,"start_character":47,"end_line":61,"end_character":61},"in_reply_to":"ba5201f7_a79c195e","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09931ad72f539b587d7978321fb10ad2c84af19e","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                help\u003d\u0027The list of IPs or hostnames of CLDB nodes.\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027maprfs_rename_managed_volume\u0027, default\u003dTrue,"},{"line_number":62,"context_line":"                help\u003d\u0027Specify whether existing volume should be renamed when\u0027"},{"line_number":63,"context_line":"                     \u0027 start managing.\u0027)"},{"line_number":64,"context_line":"]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_07ac058b","line":63,"range":{"start_line":63,"start_character":39,"end_line":63,"end_character":40},"updated":"2017-01-04 21:59:44.000000000","message":"trailing comma","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                help\u003d\u0027The list of IPs or hostnames of CLDB nodes.\u0027),"},{"line_number":61,"context_line":"    cfg.BoolOpt(\u0027maprfs_rename_managed_volume\u0027, default\u003dTrue,"},{"line_number":62,"context_line":"                help\u003d\u0027Specify whether existing volume should be renamed when\u0027"},{"line_number":63,"context_line":"                     \u0027 start managing.\u0027)"},{"line_number":64,"context_line":"]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_e3cd1fb8","line":63,"range":{"start_line":63,"start_character":39,"end_line":63,"end_character":40},"in_reply_to":"ba5201f7_07ac058b","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09931ad72f539b587d7978321fb10ad2c84af19e","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    \"\"\"MapR-FS Share Driver."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    Executes commands relating to shares."},{"line_number":74,"context_line":"    driver_handles_share_servers must be False because"},{"line_number":75,"context_line":"    this driver only manages existing shares"},{"line_number":76,"context_line":"    API version history:"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        1.0 - Initial Version"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_a7b339e8","line":75,"range":{"start_line":74,"start_character":4,"end_line":75,"end_character":44},"updated":"2017-01-04 21:59:44.000000000","message":"driver_handles_share_servers must be False because this driver does not support creating or managing virtual storage servers (share servers)?","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    \"\"\"MapR-FS Share Driver."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    Executes commands relating to shares."},{"line_number":74,"context_line":"    driver_handles_share_servers must be False because"},{"line_number":75,"context_line":"    this driver only manages existing shares"},{"line_number":76,"context_line":"    API version history:"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        1.0 - Initial Version"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_03c78396","line":75,"range":{"start_line":74,"start_character":4,"end_line":75,"end_character":44},"in_reply_to":"ba5201f7_a7b339e8","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77e4874bfde02d7f4b224791d65e8ce039c9ddad","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        path \u003d \u0027%(path)s -C %(c)s -Z %(z)s -N %(n)s\u0027 % {"},{"line_number":124,"context_line":"            \u0027path\u0027: self._maprfs_base_path + ("},{"line_number":125,"context_line":"                path or self._share_dir(share[\u0027name\u0027])),"},{"line_number":126,"context_line":"            \u0027c\u0027: \u0027 \u0027.join(self.cldb_ip),"},{"line_number":127,"context_line":"            \u0027z\u0027: \u0027 \u0027.join(self.zookeeper_ip),"},{"line_number":128,"context_line":"            \u0027n\u0027: cluster_name"},{"line_number":129,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_6676a8a5","line":126,"range":{"start_line":126,"start_character":13,"end_line":126,"end_character":14},"updated":"2017-01-05 05:45:03.000000000","message":"Suggest use cldb rather than a single letter.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        path \u003d \u0027%(path)s -C %(c)s -Z %(z)s -N %(n)s\u0027 % {"},{"line_number":124,"context_line":"            \u0027path\u0027: self._maprfs_base_path + ("},{"line_number":125,"context_line":"                path or self._share_dir(share[\u0027name\u0027])),"},{"line_number":126,"context_line":"            \u0027c\u0027: \u0027 \u0027.join(self.cldb_ip),"},{"line_number":127,"context_line":"            \u0027z\u0027: \u0027 \u0027.join(self.zookeeper_ip),"},{"line_number":128,"context_line":"            \u0027n\u0027: cluster_name"},{"line_number":129,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_23c4878f","line":126,"range":{"start_line":126,"start_character":13,"end_line":126,"end_character":14},"in_reply_to":"ba5201f7_6676a8a5","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77e4874bfde02d7f4b224791d65e8ce039c9ddad","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            \u0027path\u0027: self._maprfs_base_path + ("},{"line_number":125,"context_line":"                path or self._share_dir(share[\u0027name\u0027])),"},{"line_number":126,"context_line":"            \u0027c\u0027: \u0027 \u0027.join(self.cldb_ip),"},{"line_number":127,"context_line":"            \u0027z\u0027: \u0027 \u0027.join(self.zookeeper_ip),"},{"line_number":128,"context_line":"            \u0027n\u0027: cluster_name"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        export_list \u003d [{"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_867b8c8b","line":127,"range":{"start_line":127,"start_character":13,"end_line":127,"end_character":14},"updated":"2017-01-05 05:45:03.000000000","message":"zookeeper","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            \u0027path\u0027: self._maprfs_base_path + ("},{"line_number":125,"context_line":"                path or self._share_dir(share[\u0027name\u0027])),"},{"line_number":126,"context_line":"            \u0027c\u0027: \u0027 \u0027.join(self.cldb_ip),"},{"line_number":127,"context_line":"            \u0027z\u0027: \u0027 \u0027.join(self.zookeeper_ip),"},{"line_number":128,"context_line":"            \u0027n\u0027: cluster_name"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        export_list \u003d [{"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_43bd0b01","line":127,"range":{"start_line":127,"start_character":13,"end_line":127,"end_character":14},"in_reply_to":"ba5201f7_867b8c8b","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77e4874bfde02d7f4b224791d65e8ce039c9ddad","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                path or self._share_dir(share[\u0027name\u0027])),"},{"line_number":126,"context_line":"            \u0027c\u0027: \u0027 \u0027.join(self.cldb_ip),"},{"line_number":127,"context_line":"            \u0027z\u0027: \u0027 \u0027.join(self.zookeeper_ip),"},{"line_number":128,"context_line":"            \u0027n\u0027: cluster_name"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        export_list \u003d [{"},{"line_number":131,"context_line":"            \"path\": path,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_a66c10d1","line":128,"range":{"start_line":128,"start_character":13,"end_line":128,"end_character":14},"updated":"2017-01-05 05:45:03.000000000","message":"name","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                path or self._share_dir(share[\u0027name\u0027])),"},{"line_number":126,"context_line":"            \u0027c\u0027: \u0027 \u0027.join(self.cldb_ip),"},{"line_number":127,"context_line":"            \u0027z\u0027: \u0027 \u0027.join(self.zookeeper_ip),"},{"line_number":128,"context_line":"            \u0027n\u0027: cluster_name"},{"line_number":129,"context_line":"        }"},{"line_number":130,"context_line":"        export_list \u003d [{"},{"line_number":131,"context_line":"            \"path\": path,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_63ba0f0c","line":128,"range":{"start_line":128,"start_character":13,"end_line":128,"end_character":14},"in_reply_to":"ba5201f7_a66c10d1","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77e4874bfde02d7f4b224791d65e8ce039c9ddad","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            msg \u003d _(\u0027Only MapRFS protocol supported!\u0027)"},{"line_number":146,"context_line":"            LOG.error(msg)"},{"line_number":147,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":148,"context_line":"        options \u003d dict(metadata)"},{"line_number":149,"context_line":"        share_dir \u003d options.pop(\u0027_path\u0027, self._share_dir(share[\u0027name\u0027]))"},{"line_number":150,"context_line":"        volume_name \u003d options.pop(\u0027_name\u0027, self._volume_name(share[\u0027name\u0027]))"},{"line_number":151,"context_line":"        volume_options \u003d {}"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_c67f5464","line":148,"range":{"start_line":148,"start_character":18,"end_line":148,"end_character":22},"updated":"2017-01-05 05:45:03.000000000","message":"Use dictionary comprehension {} rather than dict() for better performance.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            msg \u003d _(\u0027Only MapRFS protocol supported!\u0027)"},{"line_number":146,"context_line":"            LOG.error(msg)"},{"line_number":147,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":148,"context_line":"        options \u003d dict(metadata)"},{"line_number":149,"context_line":"        share_dir \u003d options.pop(\u0027_path\u0027, self._share_dir(share[\u0027name\u0027]))"},{"line_number":150,"context_line":"        volume_name \u003d options.pop(\u0027_name\u0027, self._volume_name(share[\u0027name\u0027]))"},{"line_number":151,"context_line":"        volume_options \u003d {}"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_8339b3a6","line":148,"range":{"start_line":148,"start_character":18,"end_line":148,"end_character":22},"in_reply_to":"ba5201f7_c67f5464","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09931ad72f539b587d7978321fb10ad2c84af19e","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":284,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":285,"context_line":"        snapshot_name \u003d snapshot[\u0027provider_location\u0027] or snapshot[\u0027name\u0027]"},{"line_number":286,"context_line":"        volume_name \u003d self._get_volume_name(context, snapshot[\u0027share\u0027])"},{"line_number":287,"context_line":"        try:"},{"line_number":288,"context_line":"            self._maprfs_util.delete_snapshot(snapshot_name, volume_name)"},{"line_number":289,"context_line":"        except exception.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_671951d7","line":286,"range":{"start_line":285,"start_character":0,"end_line":286,"end_character":71},"updated":"2017-01-04 21:59:44.000000000","message":"What if the snapshot no longer exists or was never created. You should ignore that error like you\u0027re doing in the delete share workflow.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":284,"context_line":"        \"\"\"Deletes a snapshot.\"\"\""},{"line_number":285,"context_line":"        snapshot_name \u003d snapshot[\u0027provider_location\u0027] or snapshot[\u0027name\u0027]"},{"line_number":286,"context_line":"        volume_name \u003d self._get_volume_name(context, snapshot[\u0027share\u0027])"},{"line_number":287,"context_line":"        try:"},{"line_number":288,"context_line":"            self._maprfs_util.delete_snapshot(snapshot_name, volume_name)"},{"line_number":289,"context_line":"        except exception.ProcessExecutionError as e:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_a3e4f7e0","line":286,"range":{"start_line":285,"start_character":0,"end_line":286,"end_character":71},"in_reply_to":"ba5201f7_671951d7","updated":"2017-01-05 11:54:36.000000000","message":"Actually error will be ignored. I check error output in delete_snapshot. I do additional skipping in delete share workflow to prevent deleting share if it was not created on back-end, but another share with such back-end name can exist. This case is not valid for snapshots, as snapshot always has uuid name, while share can has custom back-end name.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09931ad72f539b587d7978321fb10ad2c84af19e","unresolved":false,"context_lines":[{"line_number":345,"context_line":"    def check_for_setup_error(self):"},{"line_number":346,"context_line":"        \"\"\"Return an error if the prerequisites are not met.\"\"\""},{"line_number":347,"context_line":"        if not self.configuration.maprfs_clinode_ip:"},{"line_number":348,"context_line":"            msg \u003d _(\u0027Not specify the MapR cluster yet! \u0027"},{"line_number":349,"context_line":"                    \u0027Add the ip or list of ip of nodes with mapr-core\u0027"},{"line_number":350,"context_line":"                    \u0027 installed in the \"maprfs_clinode_ip\"\u0027"},{"line_number":351,"context_line":"                    \u0027 configuration parameter.\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_2773c916","line":348,"range":{"start_line":348,"start_character":21,"end_line":348,"end_character":53},"updated":"2017-01-04 21:59:44.000000000","message":"suggestion: \n\n  MapR cluster has not been specified in the configuration. \n  Add the ip or list of ip of nodes with mapr-core installed\n  in the \"maprfs_clinode_ip\" configuration parameter.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":345,"context_line":"    def check_for_setup_error(self):"},{"line_number":346,"context_line":"        \"\"\"Return an error if the prerequisites are not met.\"\"\""},{"line_number":347,"context_line":"        if not self.configuration.maprfs_clinode_ip:"},{"line_number":348,"context_line":"            msg \u003d _(\u0027Not specify the MapR cluster yet! \u0027"},{"line_number":349,"context_line":"                    \u0027Add the ip or list of ip of nodes with mapr-core\u0027"},{"line_number":350,"context_line":"                    \u0027 installed in the \"maprfs_clinode_ip\"\u0027"},{"line_number":351,"context_line":"                    \u0027 configuration parameter.\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_c33f3b85","line":348,"range":{"start_line":348,"start_character":21,"end_line":348,"end_character":53},"in_reply_to":"ba5201f7_2773c916","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09931ad72f539b587d7978321fb10ad2c84af19e","unresolved":false,"context_lines":[{"line_number":373,"context_line":"    def manage_existing(self, share, driver_options):"},{"line_number":374,"context_line":"        try:"},{"line_number":375,"context_line":"            share_path \u003d share[\u0027export_location\u0027].split("},{"line_number":376,"context_line":"                \u0027 \u0027)[0][len(self._maprfs_base_path):]"},{"line_number":377,"context_line":"            info \u003d self._maprfs_util.get_volume_info_by_path("},{"line_number":378,"context_line":"                share_path, check_if_exists\u003dTrue)"},{"line_number":379,"context_line":"            if not info:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_07196522","line":376,"range":{"start_line":376,"start_character":16,"end_line":376,"end_character":19},"updated":"2017-01-04 21:59:44.000000000","message":"whitespace is the default split\n\n\nI see why you\u0027re doing what you\u0027re doing:\n\nYou\u0027re export paths have some metadata in them:\n\n maprfs:///share-067ddc1f-2e8a-426e-ba74-02f0502b9ade -C  -Z  -N manila-ci\n\nif that\u0027s the way you intend them, that\u0027s fine. However, a comment above this line would help.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":373,"context_line":"    def manage_existing(self, share, driver_options):"},{"line_number":374,"context_line":"        try:"},{"line_number":375,"context_line":"            share_path \u003d share[\u0027export_location\u0027].split("},{"line_number":376,"context_line":"                \u0027 \u0027)[0][len(self._maprfs_base_path):]"},{"line_number":377,"context_line":"            info \u003d self._maprfs_util.get_volume_info_by_path("},{"line_number":378,"context_line":"                share_path, check_if_exists\u003dTrue)"},{"line_number":379,"context_line":"            if not info:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_e3443f1c","line":376,"range":{"start_line":376,"start_character":16,"end_line":376,"end_character":19},"in_reply_to":"ba5201f7_07196522","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e1349e3e9f56571d661a27e2b3e4cfe996e1bdf5","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            self._maprfs_util.create_snapshot(snapshot_name, volume_name)"},{"line_number":253,"context_line":"            return {\u0027provider_location\u0027: snapshot_name}"},{"line_number":254,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":255,"context_line":"            msg \u003d (_(\u0027Failed to create snapshot %(snapshot_name)s for \u0027"},{"line_number":256,"context_line":"                     \u0027the share %(share_name)s. Error: %(excmsg)s.\u0027) %"},{"line_number":257,"context_line":"                   {\u0027snapshot_name\u0027: snapshot_name,"},{"line_number":258,"context_line":"                    \u0027share_name\u0027: snapshot[\u0027share_name\u0027],"},{"line_number":259,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":260,"context_line":"            LOG.error(msg)"},{"line_number":261,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba5201f7_14f7d459","line":260,"range":{"start_line":255,"start_character":12,"end_line":260,"end_character":26},"updated":"2017-01-11 15:38:14.000000000","message":"LOG.exception(...) is designed to be used in case we have raised exception that should be logged. So,here and in all other places you could use following:\n\n\"\"\"\nmsg \u003d (_(\u0027Failed to create snapshot %(snapshot_name)s for \u0027\n         \u0027the share %(share_name)s.\u0027) % {\n             \u0027snapshot_name\u0027: snapshot_name,\n             \u0027share_name\u0027: snapshot[\u0027share_name\u0027]})\nLOG.exception(msg)\n\"\"\"","commit_id":"e859823877def6c8e5ea4d523c04b954d080136b"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"afb0ced57f12213e1a21b72d844a4ec0d6df4214","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            self._maprfs_util.create_snapshot(snapshot_name, volume_name)"},{"line_number":253,"context_line":"            return {\u0027provider_location\u0027: snapshot_name}"},{"line_number":254,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":255,"context_line":"            msg \u003d (_(\u0027Failed to create snapshot %(snapshot_name)s for \u0027"},{"line_number":256,"context_line":"                     \u0027the share %(share_name)s. Error: %(excmsg)s.\u0027) %"},{"line_number":257,"context_line":"                   {\u0027snapshot_name\u0027: snapshot_name,"},{"line_number":258,"context_line":"                    \u0027share_name\u0027: snapshot[\u0027share_name\u0027],"},{"line_number":259,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":260,"context_line":"            LOG.error(msg)"},{"line_number":261,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba5201f7_47328d11","line":260,"range":{"start_line":255,"start_character":12,"end_line":260,"end_character":26},"in_reply_to":"ba5201f7_14f7d459","updated":"2017-01-11 16:46:59.000000000","message":"Using LOG.exception I am getting exception:\n\nFile \"/usr/lib/python3.4/traceback.py\", line 125, in _iter_chain\n    context \u003d exc.__context__\nAttributeError: \u0027NoneType\u0027 object has no attribute \u0027__context__\u0027","commit_id":"e859823877def6c8e5ea4d523c04b954d080136b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"5e0c6437ef38d44fc3455d907c0f51882f05907f","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            self._maprfs_util.create_snapshot(snapshot_name, volume_name)"},{"line_number":253,"context_line":"            return {\u0027provider_location\u0027: snapshot_name}"},{"line_number":254,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":255,"context_line":"            msg \u003d (_(\u0027Failed to create snapshot %(snapshot_name)s for \u0027"},{"line_number":256,"context_line":"                     \u0027the share %(share_name)s. Error: %(excmsg)s.\u0027) %"},{"line_number":257,"context_line":"                   {\u0027snapshot_name\u0027: snapshot_name,"},{"line_number":258,"context_line":"                    \u0027share_name\u0027: snapshot[\u0027share_name\u0027],"},{"line_number":259,"context_line":"                    \u0027excmsg\u0027: e})"},{"line_number":260,"context_line":"            LOG.error(msg)"},{"line_number":261,"context_line":"            raise exception.MapRFSException(msg\u003dmsg)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":21,"id":"ba5201f7_9d84c40b","line":260,"range":{"start_line":255,"start_character":12,"end_line":260,"end_character":26},"in_reply_to":"ba5201f7_47328d11","updated":"2017-01-11 17:10:01.000000000","message":"It should be used only when exception was raised and traceback exists. For example, in \"except FooException\" block.","commit_id":"e859823877def6c8e5ea4d523c04b954d080136b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c986fa964160c3b7409cde5b0c2d976e113cc413","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            \u0027zookeeper\u0027: \u0027 \u0027.join(self.zookeeper_ip),"},{"line_number":129,"context_line":"            \u0027name\u0027: cluster_name"},{"line_number":130,"context_line":"        }"},{"line_number":131,"context_line":"        export_list \u003d [{"},{"line_number":132,"context_line":"            \"path\": path,"},{"line_number":133,"context_line":"            \"is_admin_only\": False,"},{"line_number":134,"context_line":"            \"metadata\": {"},{"line_number":135,"context_line":"                \"cldb\": \u0027,\u0027.join(self.cldb_ip),"},{"line_number":136,"context_line":"                \"zookeeper\": \u0027,\u0027.join(self.zookeeper_ip),"},{"line_number":137,"context_line":"                \"cluster-name\": cluster_name,"},{"line_number":138,"context_line":"            },"},{"line_number":139,"context_line":"        }]"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        return export_list"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a57fde8_2109702d","line":139,"range":{"start_line":131,"start_character":8,"end_line":139,"end_character":10},"updated":"2017-01-12 13:26:44.000000000","message":"Are you sure you do not want to use separate network for service needs? hence - to have second export location which is \"is_admin_only\u003dTrue\"?","commit_id":"1e0a07644fe34e9fa9f1b63e31f1f280147239f0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"2e3486ab3c2c278fa044ff9a51a486b70724090d","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            self._maprfs_util.create_snapshot(snapshot_name, volume_name)"},{"line_number":248,"context_line":"            return {\u0027provider_location\u0027: snapshot_name}"},{"line_number":249,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":250,"context_line":"            msg \u003d ("},{"line_number":251,"context_line":"                _(\u0027Failed to create snapshot %(snapshot_name)s for the share \u0027"},{"line_number":252,"context_line":"                  \u0027%(share_name)s.\u0027) % {\u0027snapshot_name\u0027: snapshot_name,"},{"line_number":253,"context_line":"                                        \u0027share_name\u0027: snapshot[\u0027share_name\u0027]})"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a3c09a3_258c9d7e","line":250,"range":{"start_line":250,"start_character":18,"end_line":250,"end_character":19},"updated":"2017-01-16 22:03:46.000000000","message":"this is redundant as _() is a marker function","commit_id":"306c79fd0220b959e3aa3d451d0873a53eabeb7e"}],"manila/tests/share/drivers/maprfs/test_maprfs.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            [\u0027127.0.0.1\u0027, self.local_ip]))"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test_do_setup(self):"},{"line_number":70,"context_line":"        self._driver.do_setup(self._context)"},{"line_number":71,"context_line":"        self.assertIsNotNone(self._driver._maprfs_util)"},{"line_number":72,"context_line":"        self.assertEqual(self._driver._maprfs_util.hosts, [self.local_ip])"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_839871c1","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":44},"updated":"2016-08-06 23:00:44.000000000","message":"spacing/readability convention that most tests follow in this project: Use a blank line to separate the mocks, the method call, and the asserts.. \n\n\n   fake_data_setups\n   mocks\n  \n   actual_method_call(*args, **kwargs)\n  \n   asserts_and_verifications","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        aces \u003d {"},{"line_number":149,"context_line":"            \u0027volumeAces\u0027: {"},{"line_number":150,"context_line":"                \u0027readAce\u0027: \u0027p\u0027,"},{"line_number":151,"context_line":"                \u0027writeAce\u0027: \u0027p\u0027"},{"line_number":152,"context_line":"            }"},{"line_number":153,"context_line":"        }"},{"line_number":154,"context_line":"        volume \u003d self._driver._get_volume_name(self.share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_6393bda3","line":151,"range":{"start_line":151,"start_character":30,"end_line":151,"end_character":31},"updated":"2016-08-06 23:00:44.000000000","message":"trailing comma\nhttp://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        aces \u003d {"},{"line_number":167,"context_line":"            \u0027volumeAces\u0027: {"},{"line_number":168,"context_line":"                \u0027readAce\u0027: \u0027u:user|\u0027\u0027u:\u0027 + self.access[\u0027access_to\u0027],"},{"line_number":169,"context_line":"                \u0027writeAce\u0027: \u0027u:\u0027 + self.access[\u0027access_to\u0027]"},{"line_number":170,"context_line":"            }"},{"line_number":171,"context_line":"        }"},{"line_number":172,"context_line":"        volume \u003d self._driver._get_volume_name(self.share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_c38ee977","line":169,"range":{"start_line":169,"start_character":57,"end_line":169,"end_character":59},"updated":"2016-08-06 23:00:44.000000000","message":"same","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            return_value\u003dself.cluster_name)"},{"line_number":218,"context_line":"        self._driver.create_share_from_snapshot(self._context, self.share,"},{"line_number":219,"context_line":"                                                self.snapshot)"},{"line_number":220,"context_line":"        self._driver._maprfs_util. \\"},{"line_number":221,"context_line":"            _execute.assert_any_call(\u0027hadoop\u0027, \u0027fs\u0027, \u0027-cp\u0027, \u0027-p\u0027,"},{"line_number":222,"context_line":"                                     snapthot_path, path)"},{"line_number":223,"context_line":"        self._driver._maprfs_util. \\"},{"line_number":224,"context_line":"            _execute.assert_any_call(\u0027maprcli\u0027, \u0027volume\u0027, \u0027create\u0027, \u0027-name\u0027,"},{"line_number":225,"context_line":"                                     self.share[\u0027name\u0027], \u0027-path\u0027, path,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_83b19149","line":222,"range":{"start_line":220,"start_character":8,"end_line":222,"end_character":57},"updated":"2016-08-06 23:00:44.000000000","message":"use paranthesis for line breaks; and assigning the method name to a variable will help with formatting:\n\n \n \n   mock_execute \u003d self.mock_object(self._driver._maprfs_util, \u0027_execute\u0027)\n \n   self._driver.create_share_from_snapshot(self._context, self.share,\n                                                self.snapshot)\n \n   mock_execute.assert_any_call(\u0027hadoop\u0027, \u0027fs\u0027, \u0027-cp\u0027, \u0027-p\u0027, snapthot_path, path)","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        self._driver._maprfs_util. \\"},{"line_number":221,"context_line":"            _execute.assert_any_call(\u0027hadoop\u0027, \u0027fs\u0027, \u0027-cp\u0027, \u0027-p\u0027,"},{"line_number":222,"context_line":"                                     snapthot_path, path)"},{"line_number":223,"context_line":"        self._driver._maprfs_util. \\"},{"line_number":224,"context_line":"            _execute.assert_any_call(\u0027maprcli\u0027, \u0027volume\u0027, \u0027create\u0027, \u0027-name\u0027,"},{"line_number":225,"context_line":"                                     self.share[\u0027name\u0027], \u0027-path\u0027, path,"},{"line_number":226,"context_line":"                                     \u0027-quota\u0027, size_str, \u0027-readAce\u0027, \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_c3b70938","line":223,"range":{"start_line":223,"start_character":8,"end_line":223,"end_character":36},"updated":"2016-08-06 23:00:44.000000000","message":"same here","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09931ad72f539b587d7978321fb10ad2c84af19e","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        self.assertRaises(exception.MapRFSException, self._driver.create_share,"},{"line_number":399,"context_line":"                          self._context, self.share)"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def test_crate_share_from_snapshot(self):"},{"line_number":402,"context_line":"        fake_snapshot \u003d dict(self.snapshot)"},{"line_number":403,"context_line":"        fake_snapshot.update(share_instance\u003d{\u0027share_id\u0027: 1})"},{"line_number":404,"context_line":"        size_str \u003d six.text_type(self.share[\u0027size\u0027]) + \u0027G\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_e77b8126","line":401,"range":{"start_line":401,"start_character":13,"end_line":401,"end_character":18},"updated":"2017-01-04 21:59:44.000000000","message":"create","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09931ad72f539b587d7978321fb10ad2c84af19e","unresolved":false,"context_lines":[{"line_number":424,"context_line":"                                     \u0027-quota\u0027, size_str, \u0027-readAce\u0027, \u0027\u0027,"},{"line_number":425,"context_line":"                                     \u0027-writeAce\u0027, \u0027\u0027, \u0027-fake\u0027, \u0027fake\u0027)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def test_crate_share_from_snapshot_wrong_tenant(self):"},{"line_number":428,"context_line":"        fake_snapshot \u003d dict(self.snapshot)"},{"line_number":429,"context_line":"        fake_snapshot.update(share_instance\u003d{\u0027share_id\u0027: 10})"},{"line_number":430,"context_line":"        self._driver._maprfs_util._execute \u003d mock.Mock(return_value\u003d(\u0027\u0027, 0))"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_c77e7d18","line":427,"range":{"start_line":427,"start_character":13,"end_line":427,"end_character":18},"updated":"2017-01-04 21:59:44.000000000","message":"create","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"09931ad72f539b587d7978321fb10ad2c84af19e","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                          self._driver.create_share_from_snapshot,"},{"line_number":442,"context_line":"                          self._context, self.share, fake_snapshot)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"    def test_crate_share_from_snapshot_exception(self):"},{"line_number":445,"context_line":"        fake_snapshot \u003d dict(self.snapshot)"},{"line_number":446,"context_line":"        fake_snapshot.update(share_instance\u003d{\u0027share_id\u0027: 10})"},{"line_number":447,"context_line":"        self._driver._maprfs_util._execute \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_a785f907","line":444,"range":{"start_line":444,"start_character":13,"end_line":444,"end_character":18},"updated":"2017-01-04 21:59:44.000000000","message":"create","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        result \u003d self._driver.manage_existing(self.share, {\u0027rename\u0027: \u0027yes\u0027})"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self.assertEqual(result[\u0027size\u0027], 1)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_manage_existing_exception(self):"},{"line_number":177,"context_line":"        self._driver._maprfs_util.get_volume_info_by_path \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_a33d902c","line":174,"range":{"start_line":174,"start_character":8,"end_line":174,"end_character":43},"updated":"2017-01-07 05:07:59.000000000","message":"Should be expected, actual.  This is reversed.\n\nself.assertEqual(1, result[\u0027size\u0027])","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        result \u003d self._driver.manage_existing(self.share, {\u0027rename\u0027: \u0027yes\u0027})"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self.assertEqual(result[\u0027size\u0027], 1)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def test_manage_existing_exception(self):"},{"line_number":177,"context_line":"        self._driver._maprfs_util.get_volume_info_by_path \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_4bcae150","line":174,"range":{"start_line":174,"start_character":8,"end_line":174,"end_character":43},"in_reply_to":"ba5201f7_a33d902c","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        update \u003d self._driver.manage_existing_snapshot(self.snapshot, {})"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        self.assertEqual(update[\u0027size\u0027], 1)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def test_manage_existing_snapshot_invalid(self):"},{"line_number":208,"context_line":"        self._driver._maprfs_util.get_snapshot_list \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_c348d4ce","line":205,"updated":"2017-01-07 05:07:59.000000000","message":"Same","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        update \u003d self._driver.manage_existing_snapshot(self.snapshot, {})"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        self.assertEqual(update[\u0027size\u0027], 1)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def test_manage_existing_snapshot_invalid(self):"},{"line_number":208,"context_line":"        self._driver._maprfs_util.get_snapshot_list \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_8bdbe91a","line":205,"in_reply_to":"ba5201f7_c348d4ce","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        result \u003d self._driver.manage_existing(self.share, {})"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self.assertEqual(result[\u0027size\u0027], 2)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test__set_volume_size(self):"},{"line_number":229,"context_line":"        volume \u003d self._driver._volume_name(self.share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_e34318ad","line":226,"updated":"2017-01-07 05:07:59.000000000","message":"Same","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        result \u003d self._driver.manage_existing(self.share, {})"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self.assertEqual(result[\u0027size\u0027], 2)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test__set_volume_size(self):"},{"line_number":229,"context_line":"        volume \u003d self._driver._volume_name(self.share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_8bc4c940","line":226,"in_reply_to":"ba5201f7_e34318ad","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":"        self._driver._maprfs_util._execute(\u0027fake\u0027, \u0027cmd\u0027)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        self.assertEqual(done[0], True)"},{"line_number":544,"context_line":"        self.assertEqual(available_host, self._driver._maprfs_util.hosts[0])"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    def test__execute_exeption(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_630e488d","line":543,"updated":"2017-01-07 05:07:59.000000000","message":"Use assertTrue","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":"        self._driver._maprfs_util._execute(\u0027fake\u0027, \u0027cmd\u0027)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        self.assertEqual(done[0], True)"},{"line_number":544,"context_line":"        self.assertEqual(available_host, self._driver._maprfs_util.hosts[0])"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    def test__execute_exeption(self):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_eb063584","line":543,"in_reply_to":"ba5201f7_630e488d","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        result \u003d self._driver._maprfs_util.get_volume_info(\u0027fake_name\u0027)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        self.assertEqual(result[\u0027used\u0027], \u00270\u0027)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def test__get_volume_info_by_path(self):"},{"line_number":585,"context_line":"        fake_out \u003d \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_83296ce8","line":582,"updated":"2017-01-07 05:07:59.000000000","message":"Reversed.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        result \u003d self._driver._maprfs_util.get_volume_info(\u0027fake_name\u0027)"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        self.assertEqual(result[\u0027used\u0027], \u00270\u0027)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def test__get_volume_info_by_path(self):"},{"line_number":585,"context_line":"        fake_out \u003d \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_2b011d6b","line":582,"in_reply_to":"ba5201f7_83296ce8","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        result \u003d self._driver._maprfs_util.get_volume_info_by_path(\u0027fake_path\u0027)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        self.assertEqual(result[\u0027used\u0027], \u00270\u0027)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    def test__get_volume_info_by_path_not_exist(self):"},{"line_number":596,"context_line":"        fake_out \u003d \"No such volume\""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_a324b00c","line":593,"updated":"2017-01-07 05:07:59.000000000","message":"Reversed.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        result \u003d self._driver._maprfs_util.get_volume_info_by_path(\u0027fake_path\u0027)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"        self.assertEqual(result[\u0027used\u0027], \u00270\u0027)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"    def test__get_volume_info_by_path_not_exist(self):"},{"line_number":596,"context_line":"        fake_out \u003d \"No such volume\""}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_4bf8217d","line":593,"in_reply_to":"ba5201f7_a324b00c","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        result \u003d self._driver._maprfs_util.get_volume_info_by_path("},{"line_number":601,"context_line":"            \u0027fake_path\u0027, check_if_exists\u003dTrue)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        self.assertEqual(result, None)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def test_get_share_stats_refresh_false(self):"},{"line_number":606,"context_line":"        self._driver._stats \u003d {\u0027fake_key\u0027: \u0027fake_value\u0027}"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_c31ff4b4","line":603,"updated":"2017-01-07 05:07:59.000000000","message":"Use assertIsNone.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        result \u003d self._driver._maprfs_util.get_volume_info_by_path("},{"line_number":601,"context_line":"            \u0027fake_path\u0027, check_if_exists\u003dTrue)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        self.assertEqual(result, None)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def test_get_share_stats_refresh_false(self):"},{"line_number":606,"context_line":"        self._driver._stats \u003d {\u0027fake_key\u0027: \u0027fake_value\u0027}"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_6bf325a0","line":603,"in_reply_to":"ba5201f7_c31ff4b4","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":653,"context_line":"        self._driver._maprfs_util._execute \u003d mock.Mock("},{"line_number":654,"context_line":"            return_value\u003d(fake_out, None))"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"        list \u003d self._driver._maprfs_util.get_snapshot_list(volume_name\u003d\u0027fake\u0027,"},{"line_number":657,"context_line":"                                                           volume_path\u003d\u0027fake\u0027)"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"        self.assertEqual(list, [\u0027fake-snapshot\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_83708c0c","line":656,"range":{"start_line":656,"start_character":8,"end_line":656,"end_character":12},"updated":"2017-01-07 05:07:59.000000000","message":"\"list\" is a type.  Please use a different name.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":653,"context_line":"        self._driver._maprfs_util._execute \u003d mock.Mock("},{"line_number":654,"context_line":"            return_value\u003d(fake_out, None))"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"        list \u003d self._driver._maprfs_util.get_snapshot_list(volume_name\u003d\u0027fake\u0027,"},{"line_number":657,"context_line":"                                                           volume_path\u003d\u0027fake\u0027)"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"        self.assertEqual(list, [\u0027fake-snapshot\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_8bf20999","line":656,"range":{"start_line":656,"start_character":8,"end_line":656,"end_character":12},"in_reply_to":"ba5201f7_83708c0c","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":656,"context_line":"        list \u003d self._driver._maprfs_util.get_snapshot_list(volume_name\u003d\u0027fake\u0027,"},{"line_number":657,"context_line":"                                                           volume_path\u003d\u0027fake\u0027)"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"        self.assertEqual(list, [\u0027fake-snapshot\u0027])"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def test__cluster_name(self):"},{"line_number":662,"context_line":"        fake_info \u003d \"\"\"{"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_a36bd01c","line":659,"updated":"2017-01-07 05:07:59.000000000","message":"Reversed.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":656,"context_line":"        list \u003d self._driver._maprfs_util.get_snapshot_list(volume_name\u003d\u0027fake\u0027,"},{"line_number":657,"context_line":"                                                           volume_path\u003d\u0027fake\u0027)"},{"line_number":658,"context_line":""},{"line_number":659,"context_line":"        self.assertEqual(list, [\u0027fake-snapshot\u0027])"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def test__cluster_name(self):"},{"line_number":662,"context_line":"        fake_info \u003d \"\"\"{"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_cb2a51e7","line":659,"in_reply_to":"ba5201f7_a36bd01c","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        name \u003d self._driver._maprfs_util.get_cluster_name()"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"        self.assertEqual(name, \u0027fake\u0027)"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"    def test__cluster_name_exception(self):"},{"line_number":686,"context_line":"        fake_info \u003d \u0027fake\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_c3761405","line":683,"updated":"2017-01-07 05:07:59.000000000","message":"reversed.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        name \u003d self._driver._maprfs_util.get_cluster_name()"},{"line_number":682,"context_line":""},{"line_number":683,"context_line":"        self.assertEqual(name, \u0027fake\u0027)"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"    def test__cluster_name_exception(self):"},{"line_number":686,"context_line":"        fake_info \u003d \u0027fake\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_0b353945","line":683,"in_reply_to":"ba5201f7_c3761405","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":756,"context_line":"    def test__get_volume_name(self):"},{"line_number":757,"context_line":"        volume_name \u003d self._driver._get_volume_name(\"fake\", self.share)"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        self.assertEqual(volume_name, \u0027share-0\u0027)"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"    def test__maprfs_du(self):"},{"line_number":762,"context_line":"        self._driver._maprfs_util._execute \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_0363bc42","line":759,"updated":"2017-01-07 05:07:59.000000000","message":"reversed.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":756,"context_line":"    def test__get_volume_name(self):"},{"line_number":757,"context_line":"        volume_name \u003d self._driver._get_volume_name(\"fake\", self.share)"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        self.assertEqual(volume_name, \u0027share-0\u0027)"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"    def test__maprfs_du(self):"},{"line_number":762,"context_line":"        self._driver._maprfs_util._execute \u003d mock.Mock("}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_4b3f4125","line":759,"in_reply_to":"ba5201f7_0363bc42","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":765,"context_line":"        size \u003d self._driver._maprfs_util.maprfs_du(\"/\")"},{"line_number":766,"context_line":""},{"line_number":767,"context_line":"        self._driver._maprfs_util._execute.assert_called()"},{"line_number":768,"context_line":"        self.assertEqual(size, 1024)"},{"line_number":769,"context_line":""},{"line_number":770,"context_line":"    def test__run_as_user(self):"},{"line_number":771,"context_line":"        cmd \u003d [\u0027fake\u0027, \u0027cmd\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_23660051","line":768,"updated":"2017-01-07 05:07:59.000000000","message":"reversed.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":765,"context_line":"        size \u003d self._driver._maprfs_util.maprfs_du(\"/\")"},{"line_number":766,"context_line":""},{"line_number":767,"context_line":"        self._driver._maprfs_util._execute.assert_called()"},{"line_number":768,"context_line":"        self.assertEqual(size, 1024)"},{"line_number":769,"context_line":""},{"line_number":770,"context_line":"    def test__run_as_user(self):"},{"line_number":771,"context_line":"        cmd \u003d [\u0027fake\u0027, \u0027cmd\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_8b4929d3","line":768,"in_reply_to":"ba5201f7_23660051","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":771,"context_line":"        cmd \u003d [\u0027fake\u0027, \u0027cmd\u0027]"},{"line_number":772,"context_line":"        u_cmd \u003d self._driver._maprfs_util._as_user(cmd, \u0027user\u0027)"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"        self.assertEqual(u_cmd, [\u0027sudo\u0027, \u0027-u\u0027, \u0027user\u0027, \u0027fake\u0027, \u0027cmd\u0027])"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def test__add_params(self):"},{"line_number":777,"context_line":"        params \u003d {\u0027p1\u0027: 1, \u0027p2\u0027: 2, \u0027p3\u0027: \u00273\u0027}"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_4359448d","line":774,"updated":"2017-01-07 05:07:59.000000000","message":"reversed.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":771,"context_line":"        cmd \u003d [\u0027fake\u0027, \u0027cmd\u0027]"},{"line_number":772,"context_line":"        u_cmd \u003d self._driver._maprfs_util._as_user(cmd, \u0027user\u0027)"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"        self.assertEqual(u_cmd, [\u0027sudo\u0027, \u0027-u\u0027, \u0027user\u0027, \u0027fake\u0027, \u0027cmd\u0027])"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"    def test__add_params(self):"},{"line_number":777,"context_line":"        params \u003d {\u0027p1\u0027: 1, \u0027p2\u0027: 2, \u0027p3\u0027: \u00273\u0027}"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_ab442db7","line":774,"in_reply_to":"ba5201f7_4359448d","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":783,"context_line":"    def test_get_network_allocations_number(self):"},{"line_number":784,"context_line":"        number \u003d self._driver.get_admin_network_allocations_number()"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        self.assertEqual(number, 0)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test__user_exists(self):"},{"line_number":789,"context_line":"        fake_out \u003d \u0027user:x:1000:1000::/opt/user:/bin/bash\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_635c887d","line":786,"updated":"2017-01-07 05:07:59.000000000","message":"reversed.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":783,"context_line":"    def test_get_network_allocations_number(self):"},{"line_number":784,"context_line":"        number \u003d self._driver.get_admin_network_allocations_number()"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"        self.assertEqual(number, 0)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test__user_exists(self):"},{"line_number":789,"context_line":"        fake_out \u003d \u0027user:x:1000:1000::/opt/user:/bin/bash\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_6b2165fc","line":786,"in_reply_to":"ba5201f7_635c887d","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":792,"context_line":""},{"line_number":793,"context_line":"        result \u003d self._driver._maprfs_util.user_exists(\u0027user\u0027)"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"        self.assertEqual(result, True)"},{"line_number":796,"context_line":""},{"line_number":797,"context_line":"    def test__group_exists(self):"},{"line_number":798,"context_line":"        fake_out \u003d \u0027user:x:1000:\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_c34d34c5","line":795,"updated":"2017-01-07 05:07:59.000000000","message":"Use assertTrue","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":792,"context_line":""},{"line_number":793,"context_line":"        result \u003d self._driver._maprfs_util.user_exists(\u0027user\u0027)"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"        self.assertEqual(result, True)"},{"line_number":796,"context_line":""},{"line_number":797,"context_line":"    def test__group_exists(self):"},{"line_number":798,"context_line":"        fake_out \u003d \u0027user:x:1000:\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_8b2049f9","line":795,"in_reply_to":"ba5201f7_c34d34c5","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","unresolved":false,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":"        result \u003d self._driver._maprfs_util.group_exists(\u0027user\u0027)"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"        self.assertEqual(result, True)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_23cd2031","line":804,"updated":"2017-01-07 05:07:59.000000000","message":"assertTrue","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","unresolved":false,"context_lines":[{"line_number":801,"context_line":""},{"line_number":802,"context_line":"        result \u003d self._driver._maprfs_util.group_exists(\u0027user\u0027)"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"        self.assertEqual(result, True)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba5201f7_ab1b4dc9","line":804,"in_reply_to":"ba5201f7_23cd2031","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"}],"manila_tempest_tests/tests/api/test_shares.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f55307aecdd9030243eef414737c36087cd96802","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"class SharesMapRFSTest(SharesNFSTest):"},{"line_number":222,"context_line":"    \"\"\"Covers share functionality that is related to HDFS share type.\"\"\""},{"line_number":223,"context_line":"    protocol \u003d \"maprfs\""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6eadb0_219f7204","line":222,"range":{"start_line":222,"start_character":53,"end_line":222,"end_character":57},"updated":"2016-12-20 01:32:04.000000000","message":"MapRFS?","commit_id":"1d918e4114a3b3749ec70b2f84a79858b9cca29a"}],"releasenotes/notes/maprfs-manila-drivers-1541296f26cf78fd.yaml":[{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"dd4a51ad0da0c726b36ea73925538cef389f3ea6","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 MapR-FS"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":1,"id":"bacf61ea_e398221e","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":43},"updated":"2016-08-02 17:04:40.000000000","message":"This is not a feature, this fits into prelude section. Features are things that differ this driver from others. I suggest rewording this note.","commit_id":"71966f15381d25f6eddf18b57fe5b817e98017f9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1e87e853c5ac8f762e4758a73d43484e3f7f11d0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - Added share backend drivers for MapR-FS"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bacf61ea_63da9d79","line":4,"range":{"start_line":4,"start_character":0,"end_line":4,"end_character":0},"updated":"2016-08-06 23:00:44.000000000","message":"only one empty line is necessary at EOF","commit_id":"f2face12f666cf9db9af729363657929395115b1"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77e4874bfde02d7f4b224791d65e8ce039c9ddad","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - Added share backend drivers for MapR-FS"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_c65bd4f4","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":10},"updated":"2017-01-05 05:45:03.000000000","message":"Should be \"features:\"","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - Added share backend drivers for MapR-FS"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_63ee8fb5","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":10},"in_reply_to":"ba5201f7_c65bd4f4","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"77e4874bfde02d7f4b224791d65e8ce039c9ddad","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - Added share backend drivers for MapR-FS"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_660788ca","line":3,"updated":"2017-01-05 05:45:03.000000000","message":"Add period at the end.","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"01d66f80aab162266bd263065891ae4cc06e77cd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  - Added share backend drivers for MapR-FS"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"ba5201f7_832d3300","line":3,"in_reply_to":"ba5201f7_660788ca","updated":"2017-01-05 11:54:36.000000000","message":"Done","commit_id":"b14f35fb38f89217858243e13eba09e0affee6d7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a3a10293b06de12fc1e9ac0cc73f7eb671844f66","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features: \u003e"},{"line_number":3,"context_line":"  - Added share backend drivers for MapR-FS"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":18,"id":"ba5201f7_78faa076","line":2,"range":{"start_line":2,"start_character":9,"end_line":2,"end_character":11},"updated":"2017-01-05 23:37:00.000000000","message":"please remove \u003e","commit_id":"8c9dc174b33e10eba533054fa8c9195b2d05642f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a3a10293b06de12fc1e9ac0cc73f7eb671844f66","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features: \u003e"},{"line_number":3,"context_line":"  - Added share backend drivers for MapR-FS"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":18,"id":"ba5201f7_b8f08892","line":4,"range":{"start_line":4,"start_character":0,"end_line":4,"end_character":0},"updated":"2017-01-05 23:37:00.000000000","message":"nit: remove blank line","commit_id":"8c9dc174b33e10eba533054fa8c9195b2d05642f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ee83233e29b759f475b52f008c1d14b73005429c","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 MapR-FS"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ba5201f7_e3df98d3","line":3,"updated":"2017-01-07 05:07:59.000000000","message":"Add period at the end.","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"},{"author":{"_account_id":24225,"name":"Vitaliy Levitski","email":"vlevitski@maprtech.com","username":"vlevitski"},"change_message_id":"b366b98061b8c56b928725e6181182483167e1a3","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 MapR-FS"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"ba5201f7_6b688522","line":3,"in_reply_to":"ba5201f7_e3df98d3","updated":"2017-01-10 13:02:46.000000000","message":"Done","commit_id":"370025dd9dd7dd161438b9d63670901c705f0d3d"}]}
