)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"AuthorDate: 2015-02-10 16:54:01 -0800"},{"line_number":4,"context_line":"Commit:     Shaun Edwards \u003cshaun.edwards@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-11 17:23:12 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements: blueprint EMC Isilon Manila Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: If5f064751120890afba0571bc2b407d141ba0323"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da86d52c_678b4ec3","line":6,"updated":"2015-02-12 05:21:03.000000000","message":"Please add a title on the first line followed by an empty line. Then add a brief description.  Suggest the following:\n\nEMC Isilon Manila driver\n\nThe Isilon Manila driver supports the following functionalities:\n- Create/delete NFS/CIFS share\n- Create/delete snapshot\n- Allow/deny access to share\n- Create share from snapshot","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shaun Edwards \u003cshaun.edwards@emc.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-11 17:23:12 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements: blueprint EMC Isilon Manila Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: If5f064751120890afba0571bc2b407d141ba0323"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da86d52c_c7f5da51","line":7,"updated":"2015-02-12 05:21:03.000000000","message":"This line should be like this:\n\nimplements: blueprint emc-isilon-manila-driver\n\nWhen you click on emc-isilon-manila-driver, it will bring you to the blueprint. Also this way it will add this review url to the blueprint.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"}],"doc/source/devref/emc_isilon_driver.rst":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":52,"context_line":"Backend Configuration"},{"line_number":53,"context_line":"---------------------"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"The following parameters need to be configured in `/etc/manila/manila.conf`"},{"line_number":56,"context_line":"for the Isilon driver:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    emc_share_backend \u003d vnx"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba7be1f8_2d758e31","line":55,"updated":"2015-02-26 13:22:48.000000000","message":"It is not the only path for config. And name of config is not fixed too. Avoid usage of direct file path.\n\nFor example, I can run manila-share service using following command in CLI:\n\n/opt/stack/manila/bin/manila-share --config-file /home/foobar/my_mega_config.conf\n\nAnd it will work.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":52,"context_line":"Backend Configuration"},{"line_number":53,"context_line":"---------------------"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"The following parameters need to be configured in `/etc/manila/manila.conf`"},{"line_number":56,"context_line":"for the Isilon driver:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    emc_share_backend \u003d vnx"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba7be1f8_96b474f3","line":55,"in_reply_to":"ba7be1f8_2d758e31","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    emc_nas_pool_name \u003d \u003cpool name\u003e"},{"line_number":64,"context_line":"    share_driver \u003d manila.share.drivers.emc.driver.EMCShareDriver"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    share_driver \u003d manila.share.drivers.emc.driver.EMCShareDriver"},{"line_number":67,"context_line":"    emc_share_backend \u003d isilon"},{"line_number":68,"context_line":"    emc_nas_server \u003d \u003cIP address of Isilon cluster\u003e"},{"line_number":69,"context_line":"    emc_nas_login \u003d \u003cusername\u003e"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba7be1f8_ad989e6a","line":66,"updated":"2015-02-26 13:22:48.000000000","message":"lines 58-64 duplicate lines 66-70\n\nIf it is two different approaches for setup, then it should be reworked.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    emc_nas_pool_name \u003d \u003cpool name\u003e"},{"line_number":64,"context_line":"    share_driver \u003d manila.share.drivers.emc.driver.EMCShareDriver"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    share_driver \u003d manila.share.drivers.emc.driver.EMCShareDriver"},{"line_number":67,"context_line":"    emc_share_backend \u003d isilon"},{"line_number":68,"context_line":"    emc_nas_server \u003d \u003cIP address of Isilon cluster\u003e"},{"line_number":69,"context_line":"    emc_nas_login \u003d \u003cusername\u003e"}],"source_content_type":"text/x-rst","patch_set":4,"id":"ba7be1f8_f6c85077","line":66,"in_reply_to":"ba7be1f8_ad989e6a","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d388e8a163d045d99463d01435fb408bd1b16ccf","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"- Create CIFS/NFS Share"},{"line_number":44,"context_line":"- Delete CIFS/NFS Share"},{"line_number":45,"context_line":"- Allow CIFS/NFS Share access"},{"line_number":46,"context_line":"  * Only IP access type is supported for NFS and CIFS."},{"line_number":47,"context_line":"- Deny CIFS/NFS Share access"},{"line_number":48,"context_line":"- Create snapshot"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a80dd14_e96ed5c8","line":45,"updated":"2015-03-04 19:48:24.000000000","message":"What levels of access are supported? RW/RO?","commit_id":"56801ccf84ee4102ad701806b52306b1333fb5c3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d388e8a163d045d99463d01435fb408bd1b16ccf","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    emc_nas_server \u003d \u003cIP address of Isilon cluster\u003e"},{"line_number":61,"context_line":"    emc_nas_login \u003d \u003cusername\u003e"},{"line_number":62,"context_line":"    emc_nas_password \u003d \u003cpassword\u003e"},{"line_number":63,"context_line":"    isilon_share_root_dir \u003d \u003cdirectory on Isilon where shares will be created\u003eq"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Restart of manila-share service is needed for the configuration changes to take"},{"line_number":66,"context_line":"effect."}],"source_content_type":"text/x-rst","patch_set":6,"id":"9a80dd14_a99bfdc7","line":63,"updated":"2015-03-04 19:48:24.000000000","message":"No possibility to connect using key/cert?","commit_id":"56801ccf84ee4102ad701806b52306b1333fb5c3"}],"manila/share/drivers/emc/plugins/isilon/isilon.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 EMC"},{"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":3,"id":"da86d52c_a7a8e620","line":1,"updated":"2015-02-12 05:21:03.000000000","message":"EMC Corporation","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"124fd49e0eb57c8eac7c528148ea90652898edbe","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Isilon specific NAS backend plugin."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import os"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import requests"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_c6f13c02","line":19,"updated":"2015-02-12 18:42:55.000000000","message":"Why aren\u0027t you using Oslo logging like the rest of Manila?\n\nfrom oslo_log import log","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import requests"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import manila.exception"},{"line_number":25,"context_line":"from manila.share.drivers.emc.plugins.base import StorageConnection"},{"line_number":26,"context_line":"from manila.share.drivers.emc.plugins.isilon.isilon_api import IsilonApi"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0a7a9787","line":24,"updated":"2015-02-12 05:21:03.000000000","message":"from manila import exception","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import requests"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import manila.exception"},{"line_number":25,"context_line":"from manila.share.drivers.emc.plugins.base import StorageConnection"},{"line_number":26,"context_line":"from manila.share.drivers.emc.plugins.isilon.isilon_api import IsilonApi"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"logging.basicConfig()"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_67798ec7","line":25,"updated":"2015-02-12 05:21:03.000000000","message":"Please import modules, not objects.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import manila.exception"},{"line_number":25,"context_line":"from manila.share.drivers.emc.plugins.base import StorageConnection"},{"line_number":26,"context_line":"from manila.share.drivers.emc.plugins.isilon.isilon_api import IsilonApi"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"logging.basicConfig()"},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(\u0027EmcIsilonManilaDriver\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_a77f06aa","line":26,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def create_share(self, emc_share_driver, context, share, share_server):"},{"line_number":74,"context_line":"        \"\"\"Is called to create share.\"\"\""},{"line_number":75,"context_line":"        if share[\u0027share_proto\u0027].startswith(\u0027NFS\u0027):"},{"line_number":76,"context_line":"            location \u003d self._create_nfs_share(context, share, share_server)"},{"line_number":77,"context_line":"        elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":78,"context_line":"            location \u003d self._create_cifs_share(share)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ca895f70","line":75,"updated":"2015-02-12 05:21:03.000000000","message":"if share[\u0027share_proto\u0027] \u003d\u003d \u0027NFS\u0027:","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \"\"\"Is called to create share.\"\"\""},{"line_number":75,"context_line":"        if share[\u0027share_proto\u0027].startswith(\u0027NFS\u0027):"},{"line_number":76,"context_line":"            location \u003d self._create_nfs_share(context, share, share_server)"},{"line_number":77,"context_line":"        elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":78,"context_line":"            location \u003d self._create_cifs_share(share)"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            raise manila.exception.InvalidShare("}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_eaeb8310","line":77,"updated":"2015-02-12 05:21:03.000000000","message":"elif share[\u0027share_proto\u0027] \u003d\u003d \u0027CIFS\u0027:","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            location \u003d self._create_cifs_share(share)"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            raise manila.exception.InvalidShare("},{"line_number":81,"context_line":"                reason\u003d\u0027Unsupported share type\u0027)"},{"line_number":82,"context_line":"        return location"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def create_share_from_snapshot(self, emc_share_driver, context, share,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_6a9873c0","line":81,"updated":"2015-02-12 05:21:03.000000000","message":"raise exception.InvalidShare(\n                reason\u003d(_(\u0027Unsupported share type: %s.\u0027)\n                        % share[\u0027share_proto\u0027]))","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def _create_cifs_share(self, share):"},{"line_number":107,"context_line":"        \"\"\"Is called to create cifs share.\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # create the directory"},{"line_number":110,"context_line":"        container_path \u003d self._get_container_path(share)"},{"line_number":111,"context_line":"        self._isilon_api.create_directory(container_path)"},{"line_number":112,"context_line":"        self._isilon_api.create_smb_share(share[\u0027name\u0027], container_path)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0aeff71e","line":109,"updated":"2015-02-12 05:21:03.000000000","message":"Please make the first letter capital.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def delete_share(self, emc_share_driver, context, share, share_server):"},{"line_number":123,"context_line":"        \"\"\"Is called to remove share.\"\"\""},{"line_number":124,"context_line":"        if share[\u0027share_proto\u0027].startswith(\u0027NFS\u0027):"},{"line_number":125,"context_line":"            self._delete_nfs_share(share)"},{"line_number":126,"context_line":"        elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":127,"context_line":"            self._delete_cifs_share(share)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_6adf9369","line":124,"updated":"2015-02-12 05:21:03.000000000","message":"See previous comments.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        \"\"\"Is called to remove share.\"\"\""},{"line_number":124,"context_line":"        if share[\u0027share_proto\u0027].startswith(\u0027NFS\u0027):"},{"line_number":125,"context_line":"            self._delete_nfs_share(share)"},{"line_number":126,"context_line":"        elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":127,"context_line":"            self._delete_cifs_share(share)"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            raise manila.exception.InvalidShare("}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_8ada0776","line":126,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            self._delete_cifs_share(share)"},{"line_number":128,"context_line":"        else:"},{"line_number":129,"context_line":"            raise manila.exception.InvalidShare("},{"line_number":130,"context_line":"                reason\u003d\u0027Unsupported share type\u0027)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _delete_nfs_share(self, share):"},{"line_number":133,"context_line":"        \"\"\"Is called to remove nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_cae07f28","line":130,"updated":"2015-02-12 05:21:03.000000000","message":"Earlier comments.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            self._root_dir + \u0027/\u0027 + share[\u0027name\u0027])"},{"line_number":136,"context_line":"        export_deleted \u003d self._isilon_api.delete_nfs_share(share_id)"},{"line_number":137,"context_line":"        if not export_deleted:"},{"line_number":138,"context_line":"            raise manila.exception.Error"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _delete_cifs_share(self, share):"},{"line_number":141,"context_line":"        \"\"\"Is called to remove cifs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0ad6174f","line":138,"updated":"2015-02-12 05:21:03.000000000","message":"See previous comments.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self._isilon_api.delete_snapshot(snapshot[\u0027name\u0027])"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def ensure_share(self, emc_share_driver, context, share, share_server):"},{"line_number":150,"context_line":"        \"\"\"Invoked to sure that share is exported.\"\"\""},{"line_number":151,"context_line":"        try:"},{"line_number":152,"context_line":"            if share[\u0027share_proto\u0027].startswith(\u0027NFS\u0027):"},{"line_number":153,"context_line":"                export_path \u003d self._get_container_path(share)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0a2c5798","line":150,"updated":"2015-02-12 05:21:03.000000000","message":"to ensure","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                export_path \u003d self._get_container_path(share)"},{"line_number":154,"context_line":"                export \u003d self._isilon_api.lookup_nfs_export(export_path)"},{"line_number":155,"context_line":"                if export is None:"},{"line_number":156,"context_line":"                    raise manila.exception.Error"},{"line_number":157,"context_line":"            elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":158,"context_line":"                share \u003d self._isilon_api.lookup_smb_share(share[\u0027name\u0027])"},{"line_number":159,"context_line":"                if share is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_6ab15346","line":156,"updated":"2015-02-12 05:21:03.000000000","message":"If you can\u0027t find a more specific exception to use, you can use exception.ManilaException or create a custom exception. Please add some error message to the exception.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":158,"context_line":"                share \u003d self._isilon_api.lookup_smb_share(share[\u0027name\u0027])"},{"line_number":159,"context_line":"                if share is None:"},{"line_number":160,"context_line":"                    raise manila.exception.Error"},{"line_number":161,"context_line":"            else:"},{"line_number":162,"context_line":"                raise manila.exception.InvalidShare("},{"line_number":163,"context_line":"                    reason\u003d\u0027Unsupported share type\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_aab7cb38","line":160,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                    raise manila.exception.Error"},{"line_number":161,"context_line":"            else:"},{"line_number":162,"context_line":"                raise manila.exception.InvalidShare("},{"line_number":163,"context_line":"                    reason\u003d\u0027Unsupported share type\u0027)"},{"line_number":164,"context_line":"        except manila.exception.Error:"},{"line_number":165,"context_line":"            self.create_share(emc_share_driver, context, share)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_aabc2b07","line":163,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def allow_access(self, emc_share_driver, context, share,"},{"line_number":168,"context_line":"                     access, share_server):"},{"line_number":169,"context_line":"        \"\"\"Allow access to the share.\"\"\""},{"line_number":170,"context_line":"        if share[\u0027share_proto\u0027].startswith(\u0027NFS\u0027):"},{"line_number":171,"context_line":"            self._nfs_allow_access(share, access)"},{"line_number":172,"context_line":"        elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":173,"context_line":"            self._cifs_allow_access(share, access)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0a3d378f","line":170,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        \"\"\"Allow access to the share.\"\"\""},{"line_number":170,"context_line":"        if share[\u0027share_proto\u0027].startswith(\u0027NFS\u0027):"},{"line_number":171,"context_line":"            self._nfs_allow_access(share, access)"},{"line_number":172,"context_line":"        elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":173,"context_line":"            self._cifs_allow_access(share, access)"},{"line_number":174,"context_line":"        else:"},{"line_number":175,"context_line":"            raise manila.exception.InvalidShare("}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_4a43af12","line":172,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self._cifs_allow_access(share, access)"},{"line_number":174,"context_line":"        else:"},{"line_number":175,"context_line":"            raise manila.exception.InvalidShare("},{"line_number":176,"context_line":"                reason\u003d\u0027Unsupported share type\u0027)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _nfs_allow_access(self, share, access):"},{"line_number":179,"context_line":"        \"\"\"Allow access to nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_6a4dd33d","line":176,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        \"\"\"Allow access to nfs share.\"\"\""},{"line_number":180,"context_line":"        if access[\u0027access_type\u0027] !\u003d \u0027ip\u0027:"},{"line_number":181,"context_line":"            raise manila.exception.Error((\u0027Invalid access type supplied. \u0027"},{"line_number":182,"context_line":"                                          \u0027Only \\\u0027ip\\\u0027 type is supported\u0027))"},{"line_number":183,"context_line":"        ips \u003d access[\u0027access_to\u0027]"},{"line_number":184,"context_line":"        export_path \u003d self._get_container_path(share)"},{"line_number":185,"context_line":"        share_id \u003d self._isilon_api.lookup_nfs_export(export_path)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_6afb13c1","line":182,"updated":"2015-02-12 05:21:03.000000000","message":"reason \u003d _(\u0027Only ip access type allowed.\u0027)\n            raise exception.InvalidShareAccess(reason)","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        ips \u003d access[\u0027access_to\u0027]"},{"line_number":184,"context_line":"        export_path \u003d self._get_container_path(share)"},{"line_number":185,"context_line":"        share_id \u003d self._isilon_api.lookup_nfs_export(export_path)"},{"line_number":186,"context_line":"        # get current allowed clients"},{"line_number":187,"context_line":"        export \u003d self._isilon_api.get_nfs_export(share_id)"},{"line_number":188,"context_line":"        current_clients \u003d export[\u0027clients\u0027]"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_cafcffb7","line":186,"updated":"2015-02-12 05:21:03.000000000","message":"Upper case first letter","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        export \u003d self._isilon_api.get_nfs_export(share_id)"},{"line_number":188,"context_line":"        current_clients \u003d export[\u0027clients\u0027]"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        # XY"},{"line_number":191,"context_line":"        # format of ips could be \u002710.0.0.2\u0027, or \u002710.0q.0.2, 10.0.0.0/24\u0027"},{"line_number":192,"context_line":"        ips \u003d ips.split(\u0027,\u0027)"},{"line_number":193,"context_line":"        ips.extend(current_clients)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ca131fff","line":190,"updated":"2015-02-12 05:21:03.000000000","message":"Feel free to remove this.  Looks like I added this comment a while back.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        current_clients \u003d export[\u0027clients\u0027]"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        # XY"},{"line_number":191,"context_line":"        # format of ips could be \u002710.0.0.2\u0027, or \u002710.0q.0.2, 10.0.0.0/24\u0027"},{"line_number":192,"context_line":"        ips \u003d ips.split(\u0027,\u0027)"},{"line_number":193,"context_line":"        ips.extend(current_clients)"},{"line_number":194,"context_line":"        export_params \u003d {\"clients\": ips}"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_aa18ab1e","line":191,"updated":"2015-02-12 05:21:03.000000000","message":"Upper case first letter.  There\u0027s an extra \"q\" in the comment.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        ips \u003d ips.split(\u0027,\u0027)"},{"line_number":193,"context_line":"        ips.extend(current_clients)"},{"line_number":194,"context_line":"        export_params \u003d {\"clients\": ips}"},{"line_number":195,"context_line":"        url \u003d self._server_url + \"/platform/1/protocols/nfs/exports/\" + str("},{"line_number":196,"context_line":"            share_id)"},{"line_number":197,"context_line":"        resp \u003d self._isilon_api.request(\u0027PUT\u0027, url, data\u003dexport_params)"},{"line_number":198,"context_line":"        resp.raise_for_status()"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_4a280f33","line":195,"updated":"2015-02-12 05:21:03.000000000","message":"Use six.text_type() instead of str() for py2/3 compatibility.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        \"\"\"Allow access to cifs share.\"\"\""},{"line_number":202,"context_line":"        if access[\u0027access_type\u0027] !\u003d \u0027ip\u0027:"},{"line_number":203,"context_line":"            raise manila.exception.Error((\u0027Invalid access type supplied. \u0027"},{"line_number":204,"context_line":"                                          \u0027Only \\\u0027ip\\\u0027 type is supported\u0027))"},{"line_number":205,"context_line":"        allowed_ip \u003d \u0027allow:\u0027 + access[\u0027access_to\u0027]"},{"line_number":206,"context_line":"        smb_share \u003d self._isilon_api.lookup_smb_share(share[\u0027name\u0027])"},{"line_number":207,"context_line":"        host_acl \u003d smb_share[\u0027host_acl\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_4adf2f3a","line":204,"updated":"2015-02-12 05:21:03.000000000","message":"Same comment here as before.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            host_acl.append(allowed_ip)"},{"line_number":210,"context_line":"            data \u003d {\u0027host_acl\u0027: host_acl}"},{"line_number":211,"context_line":"            url \u003d self._server_url + \"/platform/1/protocols/smb/shares/\" + \\"},{"line_number":212,"context_line":"                smb_share[\u0027name\u0027]"},{"line_number":213,"context_line":"            r \u003d self._isilon_api.request(\u0027PUT\u0027, url, data\u003ddata)"},{"line_number":214,"context_line":"            r.raise_for_status()"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_eabc63de","line":212,"updated":"2015-02-12 05:21:03.000000000","message":"It\u0027s better to use () to wrap multi-line statement instead of \\.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def deny_access(self, emc_share_driver, context, share,"},{"line_number":217,"context_line":"                    access, share_server):"},{"line_number":218,"context_line":"        \"\"\"Deny access to the share.\"\"\""},{"line_number":219,"context_line":"        if share[\u0027share_proto\u0027].startswith(\u0027NFS\u0027):"},{"line_number":220,"context_line":"            self._nfs_deny_access(share, access)"},{"line_number":221,"context_line":"        elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":222,"context_line":"            self._cifs_deny_access(share, access)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_2ab3db0a","line":219,"updated":"2015-02-12 05:21:03.000000000","message":"Same as before","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        \"\"\"Deny access to the share.\"\"\""},{"line_number":219,"context_line":"        if share[\u0027share_proto\u0027].startswith(\u0027NFS\u0027):"},{"line_number":220,"context_line":"            self._nfs_deny_access(share, access)"},{"line_number":221,"context_line":"        elif share[\u0027share_proto\u0027].startswith(\u0027CIFS\u0027):"},{"line_number":222,"context_line":"            self._cifs_deny_access(share, access)"},{"line_number":223,"context_line":"        else:"},{"line_number":224,"context_line":"            raise manila.exception.InvalidShare("}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_4ab64ffa","line":221,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            self._cifs_deny_access(share, access)"},{"line_number":223,"context_line":"        else:"},{"line_number":224,"context_line":"            raise manila.exception.InvalidShare("},{"line_number":225,"context_line":"                reason\u003d\u0027Unsupported share type\u0027)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def _nfs_deny_access(self, share, access):"},{"line_number":228,"context_line":"        \"\"\"Deny access to nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_8acbe770","line":225,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        \"\"\"Deny access to nfs share.\"\"\""},{"line_number":229,"context_line":"        if access[\u0027access_type\u0027] !\u003d \u0027ip\u0027:"},{"line_number":230,"context_line":"            raise manila.exception.Error((\u0027Invalid access type supplied. \u0027"},{"line_number":231,"context_line":"                                          \u0027Only \\\u0027ip\\\u0027 type is supported\u0027))"},{"line_number":232,"context_line":"        denied_ip \u003d access[\u0027access_to\u0027]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        # get list of currently allowed client ips"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_eaa383af","line":231,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"124fd49e0eb57c8eac7c528148ea90652898edbe","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        \"\"\"Deny access to nfs share.\"\"\""},{"line_number":229,"context_line":"        if access[\u0027access_type\u0027] !\u003d \u0027ip\u0027:"},{"line_number":230,"context_line":"            raise manila.exception.Error((\u0027Invalid access type supplied. \u0027"},{"line_number":231,"context_line":"                                          \u0027Only \\\u0027ip\\\u0027 type is supported\u0027))"},{"line_number":232,"context_line":"        denied_ip \u003d access[\u0027access_to\u0027]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        # get list of currently allowed client ips"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_772d9c8e","line":231,"updated":"2015-02-12 18:42:55.000000000","message":"You can eliminate the escaped single quotes by enclosing the outer string in double quotes.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                                          \u0027Only \\\u0027ip\\\u0027 type is supported\u0027))"},{"line_number":232,"context_line":"        denied_ip \u003d access[\u0027access_to\u0027]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        # get list of currently allowed client ips"},{"line_number":235,"context_line":"        export_id \u003d self._isilon_api.lookup_nfs_export("},{"line_number":236,"context_line":"            self._get_container_path(share))"},{"line_number":237,"context_line":"        if export_id is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0aa7f7bd","line":234,"updated":"2015-02-12 05:21:03.000000000","message":"Upper","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        export_id \u003d self._isilon_api.lookup_nfs_export("},{"line_number":236,"context_line":"            self._get_container_path(share))"},{"line_number":237,"context_line":"        if export_id is None:"},{"line_number":238,"context_line":"            raise Exception"},{"line_number":239,"context_line":"        clients \u003d self._get_nfs_ip_access_list(export_id)"},{"line_number":240,"context_line":"        allowed_ips \u003d set(clients)"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_4aad6f9a","line":238,"updated":"2015-02-12 05:21:03.000000000","message":"Exception is too general. Please use exception.ManilaException.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            allowed_ips.remove(denied_ip)"},{"line_number":244,"context_line":"            data \u003d {\"clients\": list(allowed_ips)}"},{"line_number":245,"context_line":"            url \u003d self._server_url + \"/platform/1/protocols/nfs/exports/\" +\\"},{"line_number":246,"context_line":"                str(export_id)"},{"line_number":247,"context_line":"            r \u003d self._isilon_api.request(\u0027PUT\u0027, url, data\u003ddata)"},{"line_number":248,"context_line":"            r.raise_for_status()"},{"line_number":249,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_6a979348","line":246,"updated":"2015-02-12 05:21:03.000000000","message":"Use () instead of \\.\n\nstr() -\u003e six.text_type()","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    def _get_nfs_ip_access_list(self, export_id):"},{"line_number":253,"context_line":"        export \u003d self._isilon_api.get_nfs_export(export_id)"},{"line_number":254,"context_line":"        if export is None:"},{"line_number":255,"context_line":"            raise Exception"},{"line_number":256,"context_line":"        return export[\"clients\"]"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _cifs_deny_access(self, share, access):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_aa9d0b68","line":255,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        \"\"\"Deny access to cifs share.\"\"\""},{"line_number":260,"context_line":"        if access[\u0027access_type\u0027] !\u003d \u0027ip\u0027:"},{"line_number":261,"context_line":"            raise manila.exception.Error((\u0027Invalid access type supplied. \u0027"},{"line_number":262,"context_line":"                                          \u0027Only \\\u0027ip\\\u0027 type is supported\u0027))"},{"line_number":263,"context_line":"        ip \u003d access[\u0027access_to\u0027]"},{"line_number":264,"context_line":"        share_json \u003d self._isilon_api.lookup_smb_share(share[\u0027name\u0027])"},{"line_number":265,"context_line":"        host_acl_list \u003d share_json[\u0027host_acl\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ca987f77","line":262,"updated":"2015-02-12 05:21:03.000000000","message":"Same","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        if allow_ip in host_acl_list:"},{"line_number":268,"context_line":"            host_acl_list.remove(allow_ip)"},{"line_number":269,"context_line":"            share_params \u003d {\"host_acl\": host_acl_list}"},{"line_number":270,"context_line":"            url \u003d self._server_url + \"/platform/1/protocols/smb/shares/\" + \\"},{"line_number":271,"context_line":"                share[\u0027name\u0027]"},{"line_number":272,"context_line":"            resp \u003d self._isilon_api.request(\u0027PUT\u0027, url, data\u003dshare_params)"},{"line_number":273,"context_line":"            resp.raise_for_status()"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_4a848f0a","line":270,"updated":"2015-02-12 05:21:03.000000000","message":"()","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            resp \u003d self._isilon_api.request(\u0027PUT\u0027, url, data\u003dshare_params)"},{"line_number":273,"context_line":"            resp.raise_for_status()"},{"line_number":274,"context_line":"        else:"},{"line_number":275,"context_line":"            pass"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def raise_connect_error(self, emc_share_driver):"},{"line_number":278,"context_line":"        \"\"\"Check for setup error.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_aa742b36","line":275,"updated":"2015-02-12 05:21:03.000000000","message":"This else block can be removed.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":281,"context_line":"    def connect(self, emc_share_driver, context):"},{"line_number":282,"context_line":"        \"\"\"Connect to Isilon PAPI server.\"\"\""},{"line_number":283,"context_line":"        self._server \u003d \\"},{"line_number":284,"context_line":"            emc_share_driver.configuration.safe_get(\"emc_nas_server\")"},{"line_number":285,"context_line":"        self._port \u003d \\"},{"line_number":286,"context_line":"            int(emc_share_driver.configuration.safe_get(\"emc_nas_server_port\"))"},{"line_number":287,"context_line":"        self._server_url \u003d \u0027https://\u0027 + self._server + \u0027:\u0027 + str(self._port)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ca6f9f5e","line":284,"updated":"2015-02-12 05:21:03.000000000","message":"Use ()","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        if self._isilon_api.is_path_existent(self._root_dir) is False:"},{"line_number":302,"context_line":"            self._isilon_api.create_directory(self._root_dir, recursive\u003dTrue)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def update_share_status(self, stats_dict):"},{"line_number":305,"context_line":"        \"\"\"TODO.\"\"\""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        # TODO(IsilonDriver)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_eac9c326","line":304,"updated":"2015-02-12 05:21:03.000000000","message":"The function name should be:\n\nupdate_share_stats","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        \"\"\"TODO.\"\"\""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        # TODO(IsilonDriver)"},{"line_number":308,"context_line":"        # Perhaps query capacity, set storage_protocol, QoS support?"},{"line_number":309,"context_line":"        pass"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def get_network_allocations_number(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ea9703ea","line":308,"updated":"2015-02-12 05:21:03.000000000","message":"For now, it will use the default, which is \u0027infinite\u0027 capacity. I would suggest that you report real capacity in the future.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        # TODO(IsilonDriver)"},{"line_number":308,"context_line":"        # Perhaps query capacity, set storage_protocol, QoS support?"},{"line_number":309,"context_line":"        pass"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def get_network_allocations_number(self):"},{"line_number":312,"context_line":"        \"\"\"Returns number of network allocations for creating VIFs.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_6addd3df","line":309,"updated":"2015-02-12 05:21:03.000000000","message":"Suggest add a version:\n\nstats_dict[\u0027driver_version\u0027] \u003d VERSION","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        # TODO(IsilonDriver)"},{"line_number":314,"context_line":"        return 0"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"    def setup_server(self, network_info, metadata\u003dNone):"},{"line_number":317,"context_line":"        \"\"\"Set up and configures share server with given network parameters.\"\"\""},{"line_number":318,"context_line":"        # TODO(IsilonDriver)"},{"line_number":319,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_aaa8ab20","line":316,"updated":"2015-02-12 05:21:03.000000000","message":"Remove this function.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        # TODO(IsilonDriver)"},{"line_number":319,"context_line":"        pass"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def teardown_server(self, server_details,"},{"line_number":322,"context_line":"                        security_services\u003dNone):"},{"line_number":323,"context_line":"        \"\"\"Teardown share server.\"\"\""},{"line_number":324,"context_line":"        # TODO(IsilonDriver)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0a69b7f8","line":321,"updated":"2015-02-12 05:21:03.000000000","message":"Remove this function.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.driver_handles_share_servers \u003d False"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    # @staticmethod"},{"line_number":55,"context_line":"    # def _get_snapshot_path(snapshot_name, share_name):"},{"line_number":56,"context_line":"    #     \"\"\"Return path to a snapshot.\"\"\""},{"line_number":57,"context_line":"    #     return \"/ifs/.snapshot/\" + snapshot_name + \"/\" + share_name + \"/\""},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_921e956e","line":55,"updated":"2015-02-26 13:22:48.000000000","message":"?","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.driver_handles_share_servers \u003d False"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    # @staticmethod"},{"line_number":55,"context_line":"    # def _get_snapshot_path(snapshot_name, share_name):"},{"line_number":56,"context_line":"    #     \"\"\"Return path to a snapshot.\"\"\""},{"line_number":57,"context_line":"    #     return \"/ifs/.snapshot/\" + snapshot_name + \"/\" + share_name + \"/\""},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_b07180aa","line":55,"in_reply_to":"ba7be1f8_921e956e","updated":"2015-03-02 18:24:35.000000000","message":"Orphaned code, removed.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            self._delete_cifs_share(share)"},{"line_number":130,"context_line":"        else:"},{"line_number":131,"context_line":"            raise exception.InvalidShare("},{"line_number":132,"context_line":"                reason\u003d_(\u0027Unsupported share type\u0027))"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _delete_nfs_share(self, share):"},{"line_number":135,"context_line":"        \"\"\"Is called to remove nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_ad1fbe59","line":132,"updated":"2015-02-26 13:22:48.000000000","message":"It is not share type. It is \"protocol\", also need to provide its value within exception message.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            self._delete_cifs_share(share)"},{"line_number":130,"context_line":"        else:"},{"line_number":131,"context_line":"            raise exception.InvalidShare("},{"line_number":132,"context_line":"                reason\u003d_(\u0027Unsupported share type\u0027))"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _delete_nfs_share(self, share):"},{"line_number":135,"context_line":"        \"\"\"Is called to remove nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_70854858","line":132,"in_reply_to":"ba7be1f8_ad1fbe59","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def ensure_share(self, emc_share_driver, context, share, share_server):"},{"line_number":156,"context_line":"        \"\"\"Invoked to ensure that share is exported.\"\"\""},{"line_number":157,"context_line":"        pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def allow_access(self, emc_share_driver, context, share,"},{"line_number":160,"context_line":"                     access, share_server):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_0d38cad1","line":157,"updated":"2015-02-26 13:22:48.000000000","message":"\"pass\" is redundant","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def ensure_share(self, emc_share_driver, context, share, share_server):"},{"line_number":156,"context_line":"        \"\"\"Invoked to ensure that share is exported.\"\"\""},{"line_number":157,"context_line":"        pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def allow_access(self, emc_share_driver, context, share,"},{"line_number":160,"context_line":"                     access, share_server):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_f0905898","line":157,"in_reply_to":"ba7be1f8_0d38cad1","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            message \u003d _(\u0027Only ip access type allowed.\u0027)"},{"line_number":165,"context_line":"            raise exception.ShareBackendException(message\u003dmessage)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        access_ip \u003d access[\u0027access_to\u0027]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        if share[\u0027share_proto\u0027] \u003d\u003d \u0027NFS\u0027:"},{"line_number":170,"context_line":"            export_path \u003d self._get_container_path(share)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_ed43763f","line":167,"updated":"2015-02-26 13:22:48.000000000","message":"What about level of access - \"ro\" and \"rw\"?","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            message \u003d _(\u0027Only ip access type allowed.\u0027)"},{"line_number":165,"context_line":"            raise exception.ShareBackendException(message\u003dmessage)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        access_ip \u003d access[\u0027access_to\u0027]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        if share[\u0027share_proto\u0027] \u003d\u003d \u0027NFS\u0027:"},{"line_number":170,"context_line":"            export_path \u003d self._get_container_path(share)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_05481786","line":167,"in_reply_to":"ba7be1f8_ed43763f","updated":"2015-03-02 18:24:35.000000000","message":"I\u0027ll make a TODO for this. Will not be able to support in this driver version.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self._cifs_allow_access(access_ip, share)"},{"line_number":174,"context_line":"        else:"},{"line_number":175,"context_line":"            raise exception.InvalidShare("},{"line_number":176,"context_line":"                reason\u003d_(\u0027Unsupported share type: {0}. \u0027"},{"line_number":177,"context_line":"                         \u0027Only \"NFS\" and \"CIFS\" are currently supported \u0027"},{"line_number":178,"context_line":"                         \u0027share protocols.\u0027).format(share[\u0027share_proto\u0027]))"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_4d456241","line":176,"updated":"2015-02-26 13:22:48.000000000","message":"s/type/protocol/","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            self._cifs_allow_access(access_ip, share)"},{"line_number":174,"context_line":"        else:"},{"line_number":175,"context_line":"            raise exception.InvalidShare("},{"line_number":176,"context_line":"                reason\u003d_(\u0027Unsupported share type: {0}. \u0027"},{"line_number":177,"context_line":"                         \u0027Only \"NFS\" and \"CIFS\" are currently supported \u0027"},{"line_number":178,"context_line":"                         \u0027share protocols.\u0027).format(share[\u0027share_proto\u0027]))"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_45204fb0","line":176,"in_reply_to":"ba7be1f8_4d456241","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                   .format(self._server_url, six.text_type(export_id)))"},{"line_number":249,"context_line":"            r \u003d self._isilon_api.request(\u0027PUT\u0027, url, data\u003ddata)"},{"line_number":250,"context_line":"            r.raise_for_status()"},{"line_number":251,"context_line":"        else:"},{"line_number":252,"context_line":"            pass"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def _get_nfs_ip_access_list(self, export_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_6dece62a","line":251,"updated":"2015-02-26 13:22:48.000000000","message":"251-252 redundant","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                   .format(self._server_url, six.text_type(export_id)))"},{"line_number":249,"context_line":"            r \u003d self._isilon_api.request(\u0027PUT\u0027, url, data\u003ddata)"},{"line_number":250,"context_line":"            r.raise_for_status()"},{"line_number":251,"context_line":"        else:"},{"line_number":252,"context_line":"            pass"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def _get_nfs_ip_access_list(self, export_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_68344ade","line":251,"in_reply_to":"ba7be1f8_6dece62a","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                                                 self._password)"},{"line_number":290,"context_line":"        self._root_dir \u003d emc_share_driver.configuration.safe_get("},{"line_number":291,"context_line":"            \"emc_isilon_share_root_dir\")"},{"line_number":292,"context_line":"        # TODO(IsilonDriver) - make verify ssl a config variable?"},{"line_number":293,"context_line":"        self._verify_ssl_cert \u003d False"},{"line_number":294,"context_line":"        self._isilon_api \u003d self._isilon_api_class(self._server_url, auth\u003d("},{"line_number":295,"context_line":"            self._username, self._password),"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_ad57bec8","line":292,"updated":"2015-02-26 13:22:48.000000000","message":"TODO(name_of_person): body of future improvemnt plan.\n\nSame for all other such occurrences.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":289,"context_line":"                                                 self._password)"},{"line_number":290,"context_line":"        self._root_dir \u003d emc_share_driver.configuration.safe_get("},{"line_number":291,"context_line":"            \"emc_isilon_share_root_dir\")"},{"line_number":292,"context_line":"        # TODO(IsilonDriver) - make verify ssl a config variable?"},{"line_number":293,"context_line":"        self._verify_ssl_cert \u003d False"},{"line_number":294,"context_line":"        self._isilon_api \u003d self._isilon_api_class(self._server_url, auth\u003d("},{"line_number":295,"context_line":"            self._username, self._password),"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_e8575a00","line":292,"in_reply_to":"ba7be1f8_ad57bec8","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def setup_server(self, network_info, metadata\u003dNone):"},{"line_number":314,"context_line":"        \"\"\"Set up and configures share server with given network parameters.\"\"\""},{"line_number":315,"context_line":"        # TODO(IsilonDriver)"},{"line_number":316,"context_line":"        pass"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def teardown_server(self, server_details,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_ad25fe5c","line":315,"updated":"2015-02-26 13:22:48.000000000","message":"Same about TODO.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    def setup_server(self, network_info, metadata\u003dNone):"},{"line_number":314,"context_line":"        \"\"\"Set up and configures share server with given network parameters.\"\"\""},{"line_number":315,"context_line":"        # TODO(IsilonDriver)"},{"line_number":316,"context_line":"        pass"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def teardown_server(self, server_details,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_08802e45","line":315,"in_reply_to":"ba7be1f8_ad25fe5c","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    def setup_server(self, network_info, metadata\u003dNone):"},{"line_number":314,"context_line":"        \"\"\"Set up and configures share server with given network parameters.\"\"\""},{"line_number":315,"context_line":"        # TODO(IsilonDriver)"},{"line_number":316,"context_line":"        pass"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def teardown_server(self, server_details,"},{"line_number":319,"context_line":"                        security_services\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_ed229650","line":316,"updated":"2015-02-26 13:22:48.000000000","message":"pass is redundant.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    def setup_server(self, network_info, metadata\u003dNone):"},{"line_number":314,"context_line":"        \"\"\"Set up and configures share server with given network parameters.\"\"\""},{"line_number":315,"context_line":"        # TODO(IsilonDriver)"},{"line_number":316,"context_line":"        pass"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def teardown_server(self, server_details,"},{"line_number":319,"context_line":"                        security_services\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_a8e9e21b","line":316,"in_reply_to":"ba7be1f8_ed229650","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":318,"context_line":"    def teardown_server(self, server_details,"},{"line_number":319,"context_line":"                        security_services\u003dNone):"},{"line_number":320,"context_line":"        \"\"\"Teardown share server.\"\"\""},{"line_number":321,"context_line":"        # TODO(IsilonDriver)"},{"line_number":322,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_4d1482e8","line":321,"updated":"2015-02-26 13:22:48.000000000","message":"same here for lines 321 and 322","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":318,"context_line":"    def teardown_server(self, server_details,"},{"line_number":319,"context_line":"                        security_services\u003dNone):"},{"line_number":320,"context_line":"        \"\"\"Teardown share server.\"\"\""},{"line_number":321,"context_line":"        # TODO(IsilonDriver)"},{"line_number":322,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_284b322c","line":321,"in_reply_to":"ba7be1f8_4d1482e8","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d388e8a163d045d99463d01435fb408bd1b16ccf","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    def teardown_server(self, server_details,"},{"line_number":309,"context_line":"                        security_services\u003dNone):"},{"line_number":310,"context_line":"        \"\"\"Teardown share server.\"\"\""},{"line_number":311,"context_line":"        # TODO(Shaun Edwards)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_696ca59d","line":311,"updated":"2015-03-04 19:48:24.000000000","message":"This driver, according to line 60, is not going to handle share servers, hence nothing \"TODO\". Or you you plan to change it?","commit_id":"56801ccf84ee4102ad701806b52306b1333fb5c3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9f7b12c078c73afab0a54ed3ad0185f453a5fc68","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                    \u0027created.\u0027)]"},{"line_number":37,"context_line":"CONF.register_opts(ISILON_OPTS)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class IsilonStorageConnection(base.StorageConnection):"},{"line_number":41,"context_line":"    \"\"\"Implements Isilon specific functionality for EMC Manila driver.\"\"\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_f4e74f3e","line":39,"updated":"2015-03-05 18:35:10.000000000","message":"Common comment:\n\nYou do not use logger here at all, why?","commit_id":"ec565c53308fb0c08cee2edb460d6119a5f4f583"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9f7b12c078c73afab0a54ed3ad0185f453a5fc68","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        ips \u003d access_ips.split(\u0027,\u0027)"},{"line_number":186,"context_line":"        ips.extend(current_clients)"},{"line_number":187,"context_line":"        export_params \u003d {\"clients\": ips}"},{"line_number":188,"context_line":"        url \u003d \u0027{0}/platform/1/protocols/nfs/exports/{1}\u0027\\"},{"line_number":189,"context_line":"            .format(self._server_url, share_id)"},{"line_number":190,"context_line":"        resp \u003d self._isilon_api.request(\u0027PUT\u0027, url, data\u003dexport_params)"},{"line_number":191,"context_line":"        resp.raise_for_status()"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_54781b8f","line":188,"updated":"2015-03-05 18:35:10.000000000","message":"Following looks better:\n\nurl \u003d \u0027{0}/platform/1/protocols/nfs/exports/{1}\u0027.format(\n\n    self._server_url, share_id)","commit_id":"ec565c53308fb0c08cee2edb460d6119a5f4f583"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9f7b12c078c73afab0a54ed3ad0185f453a5fc68","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        self._port \u003d ("},{"line_number":274,"context_line":"            int(emc_share_driver.configuration.safe_get(\"emc_nas_server_port\"))"},{"line_number":275,"context_line":"        )"},{"line_number":276,"context_line":"        self._server_url \u003d \u0027https://\u0027 + self._server + \u0027:\u0027 + str(self._port)"},{"line_number":277,"context_line":"        self._username \u003d \\"},{"line_number":278,"context_line":"            emc_share_driver.configuration.safe_get(\"emc_nas_login\")"},{"line_number":279,"context_line":"        self._password \u003d \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_942453b0","line":276,"updated":"2015-03-05 18:35:10.000000000","message":"You already used \"six.text_type\" within this module, please, be consistent and use it here too instead of \"str(...)\"","commit_id":"ec565c53308fb0c08cee2edb460d6119a5f4f583"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9f7b12c078c73afab0a54ed3ad0185f453a5fc68","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def setup_server(self, network_info, metadata\u003dNone):"},{"line_number":305,"context_line":"        \"\"\"Set up and configures share server with given network parameters.\"\"\""},{"line_number":306,"context_line":"        # TODO(Shaun Edwards)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def teardown_server(self, server_details,"},{"line_number":309,"context_line":"                        security_services\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_3932c010","line":306,"updated":"2015-03-05 18:35:10.000000000","message":"Since this plugin does not support handling of share servers, what is left for \"TODO\" here?","commit_id":"ec565c53308fb0c08cee2edb460d6119a5f4f583"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9f7b12c078c73afab0a54ed3ad0185f453a5fc68","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    def teardown_server(self, server_details,"},{"line_number":309,"context_line":"                        security_services\u003dNone):"},{"line_number":310,"context_line":"        \"\"\"Teardown share server.\"\"\""},{"line_number":311,"context_line":"        # TODO(Shaun Edwards)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_993f2cd6","line":311,"updated":"2015-03-05 18:35:10.000000000","message":"ditto","commit_id":"ec565c53308fb0c08cee2edb460d6119a5f4f583"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9cafb65257abf075b9b1d2f32c9d94ebc351da2e","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            message \u003d _("},{"line_number":182,"context_line":"                \u0027Unsupported share protocol: {0}. Only \"NFS\" and \u0027"},{"line_number":183,"context_line":"                \u0027\"CIFS\" are currently supported share protocols.\u0027).format("},{"line_number":184,"context_line":"                share[\u0027share_proto\u0027])"},{"line_number":185,"context_line":"            LOG.error(message)"},{"line_number":186,"context_line":"            raise exception.InvalidShare(reason\u003dmessage)"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_170e8e34","line":184,"updated":"2015-03-06 04:15:17.000000000","message":"Suggest following the logging guidelines.  Same in other places.\n\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#adding-variables-to-translated-messages","commit_id":"477b2ad4bbe110f9f2e880dd99a22891e060e158"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9cafb65257abf075b9b1d2f32c9d94ebc351da2e","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def connect(self, emc_share_driver, context):"},{"line_number":287,"context_line":"        \"\"\"Connect to Isilon PAPI server.\"\"\""},{"line_number":288,"context_line":"        self._server \u003d \\"},{"line_number":289,"context_line":"            emc_share_driver.configuration.safe_get(\"emc_nas_server\")"},{"line_number":290,"context_line":"        self._port \u003d ("},{"line_number":291,"context_line":"            int(emc_share_driver.configuration.safe_get(\"emc_nas_server_port\"))"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_4c5a3d51","line":288,"updated":"2015-03-06 04:15:17.000000000","message":"Recommend using () instead of \\.  Same for the other places.\n\nself._server \u003d (\n    emc_share_driver.....)","commit_id":"477b2ad4bbe110f9f2e880dd99a22891e060e158"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_config import cfg"},{"line_number":22,"context_line":"from oslo_log import log"},{"line_number":23,"context_line":"import requests"},{"line_number":24,"context_line":"import six"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from manila import exception"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_86ae9b96","line":23,"updated":"2015-03-07 18:28:40.000000000","message":"\"requests\" is absent in manila requirements, but should exist if used.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_config import cfg"},{"line_number":22,"context_line":"from oslo_log import log"},{"line_number":23,"context_line":"import requests"},{"line_number":24,"context_line":"import six"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from manila import exception"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_b4d3a45e","line":23,"in_reply_to":"9a80dd14_86ae9b96","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            location \u003d self._create_cifs_share(share)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":77,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":78,"context_line":"            raise exception.InvalidShare("},{"line_number":79,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":80,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_8685bb08","line":77,"updated":"2015-03-07 18:28:40.000000000","message":"I am not sure that you will get substitution here. \"%s\" is expected, I guess.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            location \u003d self._create_cifs_share(share)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":77,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":78,"context_line":"            raise exception.InvalidShare("},{"line_number":79,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":80,"context_line":"        return location"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_c0669250","line":77,"in_reply_to":"9a80dd14_8685bb08","updated":"2015-03-10 15:47:58.000000000","message":"Good point, it doesn\u0027t look like that works. I\u0027ll redo the logging as Xing suggested.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":77,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":78,"context_line":"            raise exception.InvalidShare("},{"line_number":79,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":80,"context_line":"        return location"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def create_share_from_snapshot(self, emc_share_driver, context, share,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_a67d5f1e","line":79,"updated":"2015-03-07 18:28:40.000000000","message":"It is ok here, because you use \"format\" explicitly.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":77,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":78,"context_line":"            raise exception.InvalidShare("},{"line_number":79,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":80,"context_line":"        return location"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def create_share_from_snapshot(self, emc_share_driver, context, share,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_4052a267","line":79,"in_reply_to":"9a80dd14_a678ffc4","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":77,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":78,"context_line":"            raise exception.InvalidShare("},{"line_number":79,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":80,"context_line":"        return location"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def create_share_from_snapshot(self, emc_share_driver, context, share,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e059d68e","line":79,"in_reply_to":"9a80dd14_a67d5f1e","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":77,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":78,"context_line":"            raise exception.InvalidShare("},{"line_number":79,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":80,"context_line":"        return location"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def create_share_from_snapshot(self, emc_share_driver, context, share,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_a678ffc4","line":79,"in_reply_to":"9a80dd14_a67d5f1e","updated":"2015-03-07 19:28:15.000000000","message":"Hi Shaun,\n\nCan you please change to the following?\n\nmessage \u003d (_(\u0027Unsupported share type: %(proto)s.\u0027) % \n           {\u0027proto\u0027: share[\u0027share_proto\u0027]})\n\nLOG.error(message)\n\nraise exception.InvalidShare(reason\u003dmesage)","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # Clone snapshot to new location"},{"line_number":90,"context_line":"        fq_target_dir \u003d self._get_container_path(share)"},{"line_number":91,"context_line":"        self._isilon_api.clone_snapshot(snapshot[\u0027name\u0027], fq_target_dir)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _create_nfs_share(self, context, share, share_server):"},{"line_number":94,"context_line":"        \"\"\"Is called to create nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_34a8b01f","line":91,"updated":"2015-03-08 18:05:33.000000000","message":"Like create_share, create_share_from_snapshot should return the export location.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        # Clone snapshot to new location"},{"line_number":90,"context_line":"        fq_target_dir \u003d self._get_container_path(share)"},{"line_number":91,"context_line":"        self._isilon_api.clone_snapshot(snapshot[\u0027name\u0027], fq_target_dir)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _create_nfs_share(self, context, share, share_server):"},{"line_number":94,"context_line":"        \"\"\"Is called to create nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_8629129d","line":91,"in_reply_to":"9a80dd14_34a8b01f","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        fq_target_dir \u003d self._get_container_path(share)"},{"line_number":91,"context_line":"        self._isilon_api.clone_snapshot(snapshot[\u0027name\u0027], fq_target_dir)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _create_nfs_share(self, context, share, share_server):"},{"line_number":94,"context_line":"        \"\"\"Is called to create nfs share.\"\"\""},{"line_number":95,"context_line":"        container_path \u003d self._get_container_path(share)"},{"line_number":96,"context_line":"        self._isilon_api.create_directory(container_path)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e673d74b","line":93,"updated":"2015-03-07 18:28:40.000000000","message":"You do not use \"context\" param, why do you need it here?\n\nSame about \"share_server\". This method in not interface implementation, then you have two redundant prams here. Should be same set of params as for following func \"_create_cifs_share\".","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        fq_target_dir \u003d self._get_container_path(share)"},{"line_number":91,"context_line":"        self._isilon_api.clone_snapshot(snapshot[\u0027name\u0027], fq_target_dir)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _create_nfs_share(self, context, share, share_server):"},{"line_number":94,"context_line":"        \"\"\"Is called to create nfs share.\"\"\""},{"line_number":95,"context_line":"        container_path \u003d self._get_container_path(share)"},{"line_number":96,"context_line":"        self._isilon_api.create_directory(container_path)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_3daeb098","line":93,"in_reply_to":"9a80dd14_e673d74b","updated":"2015-03-10 15:47:58.000000000","message":"Done, will fix","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        share_created \u003d self._isilon_api.create_nfs_export(container_path)"},{"line_number":99,"context_line":"        if not share_created:"},{"line_number":100,"context_line":"            message \u003d _(\u0027The requested NFS share {0} was no created.\u0027)"},{"line_number":101,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":102,"context_line":"            raise exception.ShareBackendException("},{"line_number":103,"context_line":"                message\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":104,"context_line":"        location \u003d \u0027{0}:{1}\u0027.format(self._server, container_path)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_26916f47","line":101,"updated":"2015-03-07 18:28:40.000000000","message":"Ditto","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        share_created \u003d self._isilon_api.create_nfs_export(container_path)"},{"line_number":99,"context_line":"        if not share_created:"},{"line_number":100,"context_line":"            message \u003d _(\u0027The requested NFS share {0} was no created.\u0027)"},{"line_number":101,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":102,"context_line":"            raise exception.ShareBackendException("},{"line_number":103,"context_line":"                message\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":104,"context_line":"        location \u003d \u0027{0}:{1}\u0027.format(self._server, container_path)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_1009d32b","line":101,"in_reply_to":"9a80dd14_26916f47","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            message \u003d _(\u0027The requested NFS share {0} was no created.\u0027)"},{"line_number":101,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":102,"context_line":"            raise exception.ShareBackendException("},{"line_number":103,"context_line":"                message\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":104,"context_line":"        location \u003d \u0027{0}:{1}\u0027.format(self._server, container_path)"},{"line_number":105,"context_line":"        return location"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_067c6bb4","line":103,"updated":"2015-03-07 19:28:15.000000000","message":"Please see previous example.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            message \u003d _(\u0027The requested NFS share {0} was no created.\u0027)"},{"line_number":101,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":102,"context_line":"            raise exception.ShareBackendException("},{"line_number":103,"context_line":"                message\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":104,"context_line":"        location \u003d \u0027{0}:{1}\u0027.format(self._server, container_path)"},{"line_number":105,"context_line":"        return location"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_300c173b","line":103,"in_reply_to":"9a80dd14_067c6bb4","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        container_path \u003d self._get_container_path(share)"},{"line_number":112,"context_line":"        self._isilon_api.create_directory(container_path)"},{"line_number":113,"context_line":"        self._isilon_api.create_smb_share(share[\u0027name\u0027], container_path)"},{"line_number":114,"context_line":"        share_path \u003d \u0027//{0}/{1}\u0027.format(self._server, share[\u0027name\u0027])"},{"line_number":115,"context_line":"        return share_path"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def create_snapshot(self, emc_share_driver, context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_6697e73a","line":114,"updated":"2015-03-07 18:28:40.000000000","message":"On last IRC meeting was disscussed thing about slashes and backslashes in cifs exports. So, it is agreed on change of it to backslashes.\n\nSee: http://eavesdrop.openstack.org/meetings/manila/2015/manila.2015-03-05-15.00.log.html","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        container_path \u003d self._get_container_path(share)"},{"line_number":112,"context_line":"        self._isilon_api.create_directory(container_path)"},{"line_number":113,"context_line":"        self._isilon_api.create_smb_share(share[\u0027name\u0027], container_path)"},{"line_number":114,"context_line":"        share_path \u003d \u0027//{0}/{1}\u0027.format(self._server, share[\u0027name\u0027])"},{"line_number":115,"context_line":"        return share_path"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def create_snapshot(self, emc_share_driver, context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_70ae8f2f","line":114,"in_reply_to":"9a80dd14_6697e73a","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            self._delete_cifs_share(share)"},{"line_number":129,"context_line":"        else:"},{"line_number":130,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":131,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":132,"context_line":"            raise exception.InvalidShare("},{"line_number":133,"context_line":"                message\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_a6a47fa6","line":131,"updated":"2015-03-07 18:28:40.000000000","message":"Ditto","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            self._delete_cifs_share(share)"},{"line_number":129,"context_line":"        else:"},{"line_number":130,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":131,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":132,"context_line":"            raise exception.InvalidShare("},{"line_number":133,"context_line":"                message\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_532995e4","line":131,"in_reply_to":"9a80dd14_a6a47fa6","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":131,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":132,"context_line":"            raise exception.InvalidShare("},{"line_number":133,"context_line":"                message\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _delete_nfs_share(self, share):"},{"line_number":136,"context_line":"        \"\"\"Is called to remove nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_66428769","line":133,"updated":"2015-03-07 19:28:15.000000000","message":"Same","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            message \u003d _(\u0027Unsupported share type: {0}.\u0027)"},{"line_number":131,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":132,"context_line":"            raise exception.InvalidShare("},{"line_number":133,"context_line":"                message\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _delete_nfs_share(self, share):"},{"line_number":136,"context_line":"        \"\"\"Is called to remove nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_d37ca5ee","line":133,"in_reply_to":"9a80dd14_66428769","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        share_id \u003d self._isilon_api.lookup_nfs_export("},{"line_number":138,"context_line":"            self._root_dir + \u0027/\u0027 + share[\u0027name\u0027])"},{"line_number":139,"context_line":"        export_deleted \u003d self._isilon_api.delete_nfs_share(share_id)"},{"line_number":140,"context_line":"        if not export_deleted:"},{"line_number":141,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":142,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":143,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e6aaf76f","line":140,"updated":"2015-03-07 18:28:40.000000000","message":"I guess better to consider \"NotFound\" as OK instead of raising error in any case. Because if some share failed on creation and does not have any resources dedicated indeed and one attempted to delete it, your driver will fail operation without any real reason for it.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        share_id \u003d self._isilon_api.lookup_nfs_export("},{"line_number":138,"context_line":"            self._root_dir + \u0027/\u0027 + share[\u0027name\u0027])"},{"line_number":139,"context_line":"        export_deleted \u003d self._isilon_api.delete_nfs_share(share_id)"},{"line_number":140,"context_line":"        if not export_deleted:"},{"line_number":141,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":142,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":143,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_eed6204e","line":140,"in_reply_to":"9a80dd14_a65f1f40","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        share_id \u003d self._isilon_api.lookup_nfs_export("},{"line_number":138,"context_line":"            self._root_dir + \u0027/\u0027 + share[\u0027name\u0027])"},{"line_number":139,"context_line":"        export_deleted \u003d self._isilon_api.delete_nfs_share(share_id)"},{"line_number":140,"context_line":"        if not export_deleted:"},{"line_number":141,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":142,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":143,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_a65f1f40","line":140,"in_reply_to":"9a80dd14_e6aaf76f","updated":"2015-03-07 19:28:15.000000000","message":"Agree with Valeriy here.  \u0027NotFound\u0027 during delete operation should return success.  You can log an info message.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        share_id \u003d self._isilon_api.lookup_nfs_export("},{"line_number":138,"context_line":"            self._root_dir + \u0027/\u0027 + share[\u0027name\u0027])"},{"line_number":139,"context_line":"        export_deleted \u003d self._isilon_api.delete_nfs_share(share_id)"},{"line_number":140,"context_line":"        if not export_deleted:"},{"line_number":141,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":142,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":143,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_ced31c5e","line":140,"in_reply_to":"9a80dd14_e6aaf76f","updated":"2015-03-10 15:47:58.000000000","message":"refactored. If the share is not found no error is raised. If the share is found, but the delete fails, the exception is still raised.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        export_deleted \u003d self._isilon_api.delete_nfs_share(share_id)"},{"line_number":140,"context_line":"        if not export_deleted:"},{"line_number":141,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":142,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":143,"context_line":"            raise exception.ShareBackendException("},{"line_number":144,"context_line":"                message\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e6c11730","line":142,"updated":"2015-03-07 18:28:40.000000000","message":"ditto","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        export_deleted \u003d self._isilon_api.delete_nfs_share(share_id)"},{"line_number":140,"context_line":"        if not export_deleted:"},{"line_number":141,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":142,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":143,"context_line":"            raise exception.ShareBackendException("},{"line_number":144,"context_line":"                message\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_6ec23086","line":142,"in_reply_to":"9a80dd14_e6c11730","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":142,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":143,"context_line":"            raise exception.ShareBackendException("},{"line_number":144,"context_line":"                message\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _delete_cifs_share(self, share):"},{"line_number":147,"context_line":"        \"\"\"Is called to remove CIFS share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_86477b76","line":144,"updated":"2015-03-07 19:28:15.000000000","message":"Same","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":142,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":143,"context_line":"            raise exception.ShareBackendException("},{"line_number":144,"context_line":"                message\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _delete_cifs_share(self, share):"},{"line_number":147,"context_line":"        \"\"\"Is called to remove CIFS share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_aeb8a811","line":144,"in_reply_to":"9a80dd14_86477b76","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def _delete_cifs_share(self, share):"},{"line_number":147,"context_line":"        \"\"\"Is called to remove CIFS share.\"\"\""},{"line_number":148,"context_line":"        share_deleted \u003d self._isilon_api.delete_smb_share(share[\u0027name\u0027])"},{"line_number":149,"context_line":"        if not share_deleted:"},{"line_number":150,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":151,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":152,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_26b88fc7","line":149,"updated":"2015-03-07 18:28:40.000000000","message":"Same here, need to distinguish \"NotFound\" and other specific errors.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def _delete_cifs_share(self, share):"},{"line_number":147,"context_line":"        \"\"\"Is called to remove CIFS share.\"\"\""},{"line_number":148,"context_line":"        share_deleted \u003d self._isilon_api.delete_smb_share(share[\u0027name\u0027])"},{"line_number":149,"context_line":"        if not share_deleted:"},{"line_number":150,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":151,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":152,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e655971e","line":149,"in_reply_to":"9a80dd14_26b88fc7","updated":"2015-03-07 19:28:15.000000000","message":"+1","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def _delete_cifs_share(self, share):"},{"line_number":147,"context_line":"        \"\"\"Is called to remove CIFS share.\"\"\""},{"line_number":148,"context_line":"        share_deleted \u003d self._isilon_api.delete_smb_share(share[\u0027name\u0027])"},{"line_number":149,"context_line":"        if not share_deleted:"},{"line_number":150,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":151,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":152,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_29291237","line":149,"in_reply_to":"9a80dd14_26b88fc7","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def _delete_cifs_share(self, share):"},{"line_number":147,"context_line":"        \"\"\"Is called to remove CIFS share.\"\"\""},{"line_number":148,"context_line":"        share_deleted \u003d self._isilon_api.delete_smb_share(share[\u0027name\u0027])"},{"line_number":149,"context_line":"        if not share_deleted:"},{"line_number":150,"context_line":"            message \u003d _(\u0027Share {0} was not deleted.\u0027)"},{"line_number":151,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":152,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_4923a655","line":149,"in_reply_to":"9a80dd14_e655971e","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            message \u003d _("},{"line_number":182,"context_line":"                \u0027Unsupported share protocol: {0}. Only \"NFS\" and \u0027"},{"line_number":183,"context_line":"                \u0027\"CIFS\" are currently supported share protocols.\u0027)"},{"line_number":184,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":185,"context_line":"            raise exception.InvalidShare("},{"line_number":186,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_c6c89357","line":184,"updated":"2015-03-07 18:28:40.000000000","message":"ditto","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            message \u003d _("},{"line_number":182,"context_line":"                \u0027Unsupported share protocol: {0}. Only \"NFS\" and \u0027"},{"line_number":183,"context_line":"                \u0027\"CIFS\" are currently supported share protocols.\u0027)"},{"line_number":184,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":185,"context_line":"            raise exception.InvalidShare("},{"line_number":186,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e9c0da51","line":184,"in_reply_to":"9a80dd14_c6c89357","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                \u0027\"CIFS\" are currently supported share protocols.\u0027)"},{"line_number":184,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":185,"context_line":"            raise exception.InvalidShare("},{"line_number":186,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _nfs_allow_access(self, access_ips, export_path):"},{"line_number":189,"context_line":"        \"\"\"Allow access to nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_06538b39","line":186,"updated":"2015-03-07 19:28:15.000000000","message":"Same","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                \u0027\"CIFS\" are currently supported share protocols.\u0027)"},{"line_number":184,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":185,"context_line":"            raise exception.InvalidShare("},{"line_number":186,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _nfs_allow_access(self, access_ips, export_path):"},{"line_number":189,"context_line":"        \"\"\"Allow access to nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_09b44ef0","line":186,"in_reply_to":"9a80dd14_06538b39","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        current_clients \u003d export[\u0027clients\u0027]"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # Format of ips could be \u002710.0.0.2\u0027, or \u002710.0.0.2, 10.0.0.0/24\u0027"},{"line_number":198,"context_line":"        ips \u003d access_ips.split(\u0027,\u0027)"},{"line_number":199,"context_line":"        ips.extend(current_clients)"},{"line_number":200,"context_line":"        export_params \u003d {\"clients\": ips}"},{"line_number":201,"context_line":"        url \u003d \u0027{0}/platform/1/protocols/nfs/exports/{1}\u0027.format("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_f40d383f","line":198,"updated":"2015-03-08 18:05:33.000000000","message":"Manila access-allow doesn\u0027t currently support passing a list of IPs.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        current_clients \u003d export[\u0027clients\u0027]"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # Format of ips could be \u002710.0.0.2\u0027, or \u002710.0.0.2, 10.0.0.0/24\u0027"},{"line_number":198,"context_line":"        ips \u003d access_ips.split(\u0027,\u0027)"},{"line_number":199,"context_line":"        ips.extend(current_clients)"},{"line_number":200,"context_line":"        export_params \u003d {\"clients\": ips}"},{"line_number":201,"context_line":"        url \u003d \u0027{0}/platform/1/protocols/nfs/exports/{1}\u0027.format("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_a9bee2ab","line":198,"in_reply_to":"9a80dd14_f40d383f","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                    access, share_server):"},{"line_number":222,"context_line":"        \"\"\"Deny access to the share.\"\"\""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        if access[\u0027access_type\u0027] !\u003d \u0027ip\u0027:"},{"line_number":225,"context_line":"            message \u003d _(\u0027Only ip access type allowed.\u0027)"},{"line_number":226,"context_line":"            LOG.error(message)"},{"line_number":227,"context_line":"            raise exception.ShareBackendException(message)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_46bd83b6","line":224,"updated":"2015-03-07 18:28:40.000000000","message":"Why do you need this verification here? It is common situation when one tries to create access rule with unsupported type, gets error and then tries to delete it and your driver will restrict such deletion without any need for it.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                    access, share_server):"},{"line_number":222,"context_line":"        \"\"\"Deny access to the share.\"\"\""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        if access[\u0027access_type\u0027] !\u003d \u0027ip\u0027:"},{"line_number":225,"context_line":"            message \u003d _(\u0027Only ip access type allowed.\u0027)"},{"line_number":226,"context_line":"            LOG.error(message)"},{"line_number":227,"context_line":"            raise exception.ShareBackendException(message)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e4ef211c","line":224,"in_reply_to":"9a80dd14_46bd83b6","updated":"2015-03-10 15:47:58.000000000","message":"Good point, will have the method simply return if \u0027access_type\u0027 is not \u0027ip\u0027","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            message \u003d _(\u0027Unsupported share protocol: {0}. Only \"NFS\" and \u0027"},{"line_number":236,"context_line":"                        \u0027\"CIFS\" are currently supported share protocols.\u0027"},{"line_number":237,"context_line":"                        )"},{"line_number":238,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":239,"context_line":"            raise exception.InvalidShare("},{"line_number":240,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_a6cb9f51","line":238,"updated":"2015-03-07 18:28:40.000000000","message":"ditto","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            message \u003d _(\u0027Unsupported share protocol: {0}. Only \"NFS\" and \u0027"},{"line_number":236,"context_line":"                        \u0027\"CIFS\" are currently supported share protocols.\u0027"},{"line_number":237,"context_line":"                        )"},{"line_number":238,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":239,"context_line":"            raise exception.InvalidShare("},{"line_number":240,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_646b311e","line":238,"in_reply_to":"9a80dd14_a6cb9f51","updated":"2015-03-10 15:47:58.000000000","message":"removed else block","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                        )"},{"line_number":238,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":239,"context_line":"            raise exception.InvalidShare("},{"line_number":240,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def _nfs_deny_access(self, denied_ip, share):"},{"line_number":243,"context_line":"        \"\"\"Deny access to nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_6639a7f1","line":240,"updated":"2015-03-07 19:28:15.000000000","message":"Same","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                        )"},{"line_number":238,"context_line":"            LOG.error(message, share[\u0027share_proto\u0027])"},{"line_number":239,"context_line":"            raise exception.InvalidShare("},{"line_number":240,"context_line":"                reason\u003dmessage.format(share[\u0027share_proto\u0027]))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def _nfs_deny_access(self, denied_ip, share):"},{"line_number":243,"context_line":"        \"\"\"Deny access to nfs share.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_c463fd3f","line":240,"in_reply_to":"9a80dd14_6639a7f1","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        # Get list of currently allowed client ips"},{"line_number":246,"context_line":"        export_id \u003d self._isilon_api.lookup_nfs_export("},{"line_number":247,"context_line":"            self._get_container_path(share))"},{"line_number":248,"context_line":"        if export_id is None:"},{"line_number":249,"context_line":"            message \u003d _(\u0027Share {0} should have been created, but was not \u0027"},{"line_number":250,"context_line":"                        \u0027found.\u0027)"},{"line_number":251,"context_line":"            LOG.error(message, share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_3f496960","line":248,"updated":"2015-03-08 18:05:33.000000000","message":"This block has no unit test coverage.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        # Get list of currently allowed client ips"},{"line_number":246,"context_line":"        export_id \u003d self._isilon_api.lookup_nfs_export("},{"line_number":247,"context_line":"            self._get_container_path(share))"},{"line_number":248,"context_line":"        if export_id is None:"},{"line_number":249,"context_line":"            message \u003d _(\u0027Share {0} should have been created, but was not \u0027"},{"line_number":250,"context_line":"                        \u0027found.\u0027)"},{"line_number":251,"context_line":"            LOG.error(message, share[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_2415b948","line":248,"in_reply_to":"9a80dd14_3f496960","updated":"2015-03-10 15:47:58.000000000","message":"added coverage","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                        \u0027found.\u0027)"},{"line_number":251,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":252,"context_line":"            raise exception.ShareBackendException("},{"line_number":253,"context_line":"                reason\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":254,"context_line":"        clients \u003d self._get_nfs_ip_access_list(export_id)"},{"line_number":255,"context_line":"        allowed_ips \u003d set(clients)"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_863e9bd8","line":253,"updated":"2015-03-07 19:28:15.000000000","message":"Same","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                        \u0027found.\u0027)"},{"line_number":251,"context_line":"            LOG.error(message, share[\u0027name\u0027])"},{"line_number":252,"context_line":"            raise exception.ShareBackendException("},{"line_number":253,"context_line":"                reason\u003dmessage.format(share[\u0027name\u0027]))"},{"line_number":254,"context_line":"        clients \u003d self._get_nfs_ip_access_list(export_id)"},{"line_number":255,"context_line":"        allowed_ips \u003d set(clients)"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_3bda3317","line":253,"in_reply_to":"9a80dd14_863e9bd8","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _get_nfs_ip_access_list(self, export_id):"},{"line_number":266,"context_line":"        export \u003d self._isilon_api.get_nfs_export(export_id)"},{"line_number":267,"context_line":"        if export is None:"},{"line_number":268,"context_line":"            message \u003d _(\u0027NFS share with export id {0} should have been \u0027"},{"line_number":269,"context_line":"                        \u0027created, but was not found.\u0027)"},{"line_number":270,"context_line":"            LOG.error(message, export_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_5f461d50","line":267,"updated":"2015-03-08 18:05:33.000000000","message":"This block has no unit test coverage.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def _get_nfs_ip_access_list(self, export_id):"},{"line_number":266,"context_line":"        export \u003d self._isilon_api.get_nfs_export(export_id)"},{"line_number":267,"context_line":"        if export is None:"},{"line_number":268,"context_line":"            message \u003d _(\u0027NFS share with export id {0} should have been \u0027"},{"line_number":269,"context_line":"                        \u0027created, but was not found.\u0027)"},{"line_number":270,"context_line":"            LOG.error(message, export_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_1e70fd70","line":267,"in_reply_to":"9a80dd14_5f461d50","updated":"2015-03-10 15:47:58.000000000","message":"added coverage","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        if export is None:"},{"line_number":268,"context_line":"            message \u003d _(\u0027NFS share with export id {0} should have been \u0027"},{"line_number":269,"context_line":"                        \u0027created, but was not found.\u0027)"},{"line_number":270,"context_line":"            LOG.error(message, export_id)"},{"line_number":271,"context_line":"            raise exception.ShareBackendException("},{"line_number":272,"context_line":"                reason\u003dmessage.format(export_id))"},{"line_number":273,"context_line":"        return export[\"clients\"]"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_86b3fbe7","line":270,"updated":"2015-03-07 18:28:40.000000000","message":"ditto","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        if export is None:"},{"line_number":268,"context_line":"            message \u003d _(\u0027NFS share with export id {0} should have been \u0027"},{"line_number":269,"context_line":"                        \u0027created, but was not found.\u0027)"},{"line_number":270,"context_line":"            LOG.error(message, export_id)"},{"line_number":271,"context_line":"            raise exception.ShareBackendException("},{"line_number":272,"context_line":"                reason\u003dmessage.format(export_id))"},{"line_number":273,"context_line":"        return export[\"clients\"]"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_be0e11e3","line":270,"in_reply_to":"9a80dd14_86b3fbe7","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"59a3958c1427d2f38c444c62cfe699bd23fe4aaa","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                        \u0027created, but was not found.\u0027)"},{"line_number":270,"context_line":"            LOG.error(message, export_id)"},{"line_number":271,"context_line":"            raise exception.ShareBackendException("},{"line_number":272,"context_line":"                reason\u003dmessage.format(export_id))"},{"line_number":273,"context_line":"        return export[\"clients\"]"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _cifs_deny_access(self, denied_ip, share):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_a6263fcc","line":272,"updated":"2015-03-07 19:28:15.000000000","message":"Same","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":269,"context_line":"                        \u0027created, but was not found.\u0027)"},{"line_number":270,"context_line":"            LOG.error(message, export_id)"},{"line_number":271,"context_line":"            raise exception.ShareBackendException("},{"line_number":272,"context_line":"                reason\u003dmessage.format(export_id))"},{"line_number":273,"context_line":"        return export[\"clients\"]"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _cifs_deny_access(self, denied_ip, share):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_fefb29be","line":272,"in_reply_to":"9a80dd14_a6263fcc","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self._isilon_api \u003d self._isilon_api_class(self._server_url, auth\u003d("},{"line_number":309,"context_line":"            self._username, self._password),"},{"line_number":310,"context_line":"            verify_ssl_cert\u003dself._verify_ssl_cert)"},{"line_number":311,"context_line":"        if self._isilon_api.is_path_existent(self._root_dir) is False:"},{"line_number":312,"context_line":"            self._isilon_api.create_directory(self._root_dir, recursive\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def update_share_stats(self, stats_dict):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_1f6745ea","line":311,"updated":"2015-03-08 18:05:33.000000000","message":"It is preferable to use \"if not ...\"\n\nhttps://www.python.org/dev/peps/pep-0008/#programming-recommendations","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        self._isilon_api \u003d self._isilon_api_class(self._server_url, auth\u003d("},{"line_number":309,"context_line":"            self._username, self._password),"},{"line_number":310,"context_line":"            verify_ssl_cert\u003dself._verify_ssl_cert)"},{"line_number":311,"context_line":"        if self._isilon_api.is_path_existent(self._root_dir) is False:"},{"line_number":312,"context_line":"            self._isilon_api.create_directory(self._root_dir, recursive\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def update_share_stats(self, stats_dict):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_5efd15b0","line":311,"in_reply_to":"9a80dd14_1f6745ea","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            self._username, self._password),"},{"line_number":310,"context_line":"            verify_ssl_cert\u003dself._verify_ssl_cert)"},{"line_number":311,"context_line":"        if self._isilon_api.is_path_existent(self._root_dir) is False:"},{"line_number":312,"context_line":"            self._isilon_api.create_directory(self._root_dir, recursive\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":315,"context_line":"        \"\"\"TODO.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_bf7ab974","line":312,"updated":"2015-03-08 18:05:33.000000000","message":"This line does not appear to be covered by unit tests.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            self._username, self._password),"},{"line_number":310,"context_line":"            verify_ssl_cert\u003dself._verify_ssl_cert)"},{"line_number":311,"context_line":"        if self._isilon_api.is_path_existent(self._root_dir) is False:"},{"line_number":312,"context_line":"            self._isilon_api.create_directory(self._root_dir, recursive\u003dTrue)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def update_share_stats(self, stats_dict):"},{"line_number":315,"context_line":"        \"\"\"TODO.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_81eb8eaf","line":312,"in_reply_to":"9a80dd14_bf7ab974","updated":"2015-03-10 15:47:58.000000000","message":"Done. Added test coverage.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"}],"manila/share/drivers/emc/plugins/isilon/isilon_api.py":[{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"124fd49e0eb57c8eac7c528148ea90652898edbe","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import requests"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_d7f1e801","line":17,"updated":"2015-02-12 18:42:55.000000000","message":"from oslo_log import log","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \"\"\"Create a directory.\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        headers \u003d {\"x-isi-ifs-target-type\": \"container\"}"},{"line_number":41,"context_line":"        url \u003d self.host_url + \"/namespace\" + container_path + \u0027?recursive\u003d\u0027 \\"},{"line_number":42,"context_line":"            + str(recursive)"},{"line_number":43,"context_line":"        r \u003d self.request(\u0027PUT\u0027, url,"},{"line_number":44,"context_line":"                         headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0a50d730","line":41,"updated":"2015-02-12 05:21:03.000000000","message":"Use () instead of \\","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        headers \u003d {\"x-isi-ifs-target-type\": \"container\"}"},{"line_number":41,"context_line":"        url \u003d self.host_url + \"/namespace\" + container_path + \u0027?recursive\u003d\u0027 \\"},{"line_number":42,"context_line":"            + str(recursive)"},{"line_number":43,"context_line":"        r \u003d self.request(\u0027PUT\u0027, url,"},{"line_number":44,"context_line":"                         headers\u003dheaders)"},{"line_number":45,"context_line":"        return r.status_code \u003d\u003d 200"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_4a464f7c","line":42,"updated":"2015-02-12 05:21:03.000000000","message":"six.text_type()","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"124fd49e0eb57c8eac7c528148ea90652898edbe","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                                              dest_item_path, snapshot_name)"},{"line_number":76,"context_line":"            else:"},{"line_number":77,"context_line":"                # do nothing"},{"line_number":78,"context_line":"                pass"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def clone_file_from_snapshot(self, fq_file_path, fq_dest_path,"},{"line_number":81,"context_line":"                                 snapshot_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_f7426c0d","line":78,"updated":"2015-02-12 18:42:55.000000000","message":"Can be removed.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"124fd49e0eb57c8eac7c528148ea90652898edbe","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        response \u003d self.request(\u0027GET\u0027,"},{"line_number":142,"context_line":"                                self.host_url +"},{"line_number":143,"context_line":"                                \u0027/platform/1/protocols/nfs/exports/\u0027 +"},{"line_number":144,"context_line":"                                str(export_id))"},{"line_number":145,"context_line":"        if response.status_code \u003d\u003d 200:"},{"line_number":146,"context_line":"            return response.json()[\u0027exports\u0027][0]"},{"line_number":147,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_3779642f","line":144,"updated":"2015-02-12 18:42:55.000000000","message":"six.text_type()","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"124fd49e0eb57c8eac7c528148ea90652898edbe","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        data \u003d {\u0027paths\u0027: [export_path]}"},{"line_number":166,"context_line":"        url \u003d self.host_url + \u0027/platform/1/protocols/nfs/exports\u0027"},{"line_number":167,"context_line":"        response \u003d self.request(\u0027POST\u0027, url, data\u003ddata)"},{"line_number":168,"context_line":"        if response.status_code \u003d\u003d 201:"},{"line_number":169,"context_line":"            return True"},{"line_number":170,"context_line":"        else:"},{"line_number":171,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_37924457","line":168,"updated":"2015-02-12 18:42:55.000000000","message":"You could shorten this:  return response.status_code \u003d\u003d 201\n\nSame applies below.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"124fd49e0eb57c8eac7c528148ea90652898edbe","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        r \u003d self.request(\u0027DELETE\u0027,"},{"line_number":208,"context_line":"                         self.host_url + \u0027/namespace\u0027 + fq_resource_path +"},{"line_number":209,"context_line":"                         \u0027?recursive\u003d\u0027 + str(recursive))"},{"line_number":210,"context_line":"        r.raise_for_status()"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    # Returns true if deleted successfully, false otherwise"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_37a0848f","line":209,"updated":"2015-02-12 18:42:55.000000000","message":"six.text_type()","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c70a5f8e6e6615d4e2cdc4dd409375b2f0f0ed2c","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    # Returns true if deleted successfully, false otherwise"},{"line_number":213,"context_line":"    def delete_nfs_share(self, share_number):"},{"line_number":214,"context_line":"        response \u003d self.session.delete("},{"line_number":215,"context_line":"            self.host_url + \u0027/platform/1/protocols/nfs/exports\u0027 + \u0027/\u0027 + str("},{"line_number":216,"context_line":"                share_number))"},{"line_number":217,"context_line":"        if response.status_code \u003d\u003d 204:"},{"line_number":218,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_8a74c7cf","line":215,"updated":"2015-02-12 05:21:03.000000000","message":"str() -\u003e six.text_type()","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import requests"},{"line_number":19,"context_line":"import six"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_d2a1ed46","line":16,"updated":"2015-02-26 13:22:48.000000000","message":"Please, use oslo lib jsonutils instead of json.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import requests"},{"line_number":19,"context_line":"import six"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_9b2626b9","line":16,"in_reply_to":"ba7be1f8_d2a1ed46","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class IsilonApi(object):"},{"line_number":25,"context_line":"    NFS_PROTOCOL \u003d \u0027NFS\u0027"},{"line_number":26,"context_line":"    SMB_PROTOCOL \u003d \u0027SMB\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, api_url, auth, verify_ssl_cert\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_322ec9a5","line":25,"updated":"2015-02-26 13:22:48.000000000","message":"These both (25, 26) are not used.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class IsilonApi(object):"},{"line_number":25,"context_line":"    NFS_PROTOCOL \u003d \u0027NFS\u0027"},{"line_number":26,"context_line":"    SMB_PROTOCOL \u003d \u0027SMB\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, api_url, auth, verify_ssl_cert\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_db209e9d","line":25,"in_reply_to":"ba7be1f8_322ec9a5","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                                               new_relative_path)"},{"line_number":70,"context_line":"            elif item[\u0027type\u0027] \u003d\u003d \u0027object\u0027:"},{"line_number":71,"context_line":"                self.clone_file_from_snapshot(\u0027/ifs\u0027 + new_relative_path,"},{"line_number":72,"context_line":"                                              dest_item_path, snapshot_name)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def clone_file_from_snapshot(self, fq_file_path, fq_dest_path,"},{"line_number":75,"context_line":"                                 snapshot_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_d2464d7a","line":72,"updated":"2015-02-26 13:22:48.000000000","message":"If \"else\" what then?\n\nI guess other case is unexpected, then need to add rise of error.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                                               new_relative_path)"},{"line_number":70,"context_line":"            elif item[\u0027type\u0027] \u003d\u003d \u0027object\u0027:"},{"line_number":71,"context_line":"                self.clone_file_from_snapshot(\u0027/ifs\u0027 + new_relative_path,"},{"line_number":72,"context_line":"                                              dest_item_path, snapshot_name)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def clone_file_from_snapshot(self, fq_file_path, fq_dest_path,"},{"line_number":75,"context_line":"                                 snapshot_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_1b95d63f","line":72,"in_reply_to":"ba7be1f8_d2464d7a","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete_smb_share(self, share_name):"},{"line_number":203,"context_line":"        data \u003d {}"},{"line_number":204,"context_line":"        data[\u0027name\u0027] \u003d share_name"},{"line_number":205,"context_line":"        url \u003d self.host_url + \u0027/platform/1/protocols/smb/shares/\u0027 + share_name"},{"line_number":206,"context_line":"        response \u003d self.request(\u0027DELETE\u0027, url)"},{"line_number":207,"context_line":"        return response.status_code \u003d\u003d 204"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_32e409ab","line":204,"updated":"2015-02-26 13:22:48.000000000","message":"\"data\" is unused. So, lines 203-204 should be removed.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def delete_smb_share(self, share_name):"},{"line_number":203,"context_line":"        data \u003d {}"},{"line_number":204,"context_line":"        data[\u0027name\u0027] \u003d share_name"},{"line_number":205,"context_line":"        url \u003d self.host_url + \u0027/platform/1/protocols/smb/shares/\u0027 + share_name"},{"line_number":206,"context_line":"        response \u003d self.request(\u0027DELETE\u0027, url)"},{"line_number":207,"context_line":"        return response.status_code \u003d\u003d 204"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_5b766e3f","line":204,"in_reply_to":"ba7be1f8_32e409ab","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d388e8a163d045d99463d01435fb408bd1b16ccf","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        response.raise_for_status()"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def request(self, method, url, headers\u003dNone, data\u003dNone):"},{"line_number":217,"context_line":"        _LI(\u0027Request made with url: {0}\u0027).format(url)"},{"line_number":218,"context_line":"        if data is not None:"},{"line_number":219,"context_line":"            data \u003d jsonutils.dumps(data)"},{"line_number":220,"context_line":"        r \u003d self.session.request(method, url, headers\u003dheaders, data\u003ddata,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_49cb6172","line":217,"updated":"2015-03-04 19:48:24.000000000","message":"You create marked message, but do not log it, why?","commit_id":"56801ccf84ee4102ad701806b52306b1333fb5c3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9f7b12c078c73afab0a54ed3ad0185f453a5fc68","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from manila import exception"},{"line_number":21,"context_line":"from manila.i18n import _"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class IsilonApi(object):"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_b4c4f792","line":22,"updated":"2015-03-05 18:35:10.000000000","message":"Same here, you do not use logger at all, why?","commit_id":"ec565c53308fb0c08cee2edb460d6119a5f4f583"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9cafb65257abf075b9b1d2f32c9d94ebc351da2e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        snapshot_path \u003d snapshot[\u0027path\u0027]"},{"line_number":49,"context_line":"        # remove /ifs from start of path"},{"line_number":50,"context_line":"        relative_snapshot_path \u003d snapshot_path[4:]"},{"line_number":51,"context_line":"        fq_snapshot_path \u003d \u0027/ifs/.snapshot/\u0027 + snapshot_name + \\"},{"line_number":52,"context_line":"                           relative_snapshot_path"},{"line_number":53,"context_line":"        self._clone_directory_contents(fq_snapshot_path, fq_target_dir,"},{"line_number":54,"context_line":"                                       snapshot_name, relative_snapshot_path)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_573646e8","line":51,"updated":"2015-03-06 04:15:17.000000000","message":"Suggest use () instead of \\","commit_id":"477b2ad4bbe110f9f2e880dd99a22891e060e158"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9cafb65257abf075b9b1d2f32c9d94ebc351da2e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                 snapshot_name):"},{"line_number":82,"context_line":"        headers \u003d {\u0027x-isi-ifs-copy-source\u0027: \u0027/namespace\u0027 + fq_file_path}"},{"line_number":83,"context_line":"        snapshot_suffix \u003d \u0027\u0026snapshot\u003d\u0027 + snapshot_name"},{"line_number":84,"context_line":"        url \u003d self.host_url + \u0027/namespace\u0027 + fq_dest_path + \u0027?clone\u003dtrue\u0027 + \\"},{"line_number":85,"context_line":"            snapshot_suffix"},{"line_number":86,"context_line":"        self.request(\u0027PUT\u0027, url, headers\u003dheaders)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_9730bee9","line":84,"updated":"2015-03-06 04:15:17.000000000","message":"Here too","commit_id":"477b2ad4bbe110f9f2e880dd99a22891e060e158"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            elif item[\u0027type\u0027] \u003d\u003d \u0027object\u0027:"},{"line_number":72,"context_line":"                self.clone_file_from_snapshot(\u0027/ifs\u0027 + new_relative_path,"},{"line_number":73,"context_line":"                                              dest_item_path, snapshot_name)"},{"line_number":74,"context_line":"            else:"},{"line_number":75,"context_line":"                message \u003d _(\u0027Item: {0} has unexpected type: {1} .\u0027)"},{"line_number":76,"context_line":"                LOG.error(message, name, item[\u0027type\u0027])"},{"line_number":77,"context_line":"                raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_ff97d18d","line":74,"updated":"2015-03-08 18:05:33.000000000","message":"This block has no unit test coverage.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            elif item[\u0027type\u0027] \u003d\u003d \u0027object\u0027:"},{"line_number":72,"context_line":"                self.clone_file_from_snapshot(\u0027/ifs\u0027 + new_relative_path,"},{"line_number":73,"context_line":"                                              dest_item_path, snapshot_name)"},{"line_number":74,"context_line":"            else:"},{"line_number":75,"context_line":"                message \u003d _(\u0027Item: {0} has unexpected type: {1} .\u0027)"},{"line_number":76,"context_line":"                LOG.error(message, name, item[\u0027type\u0027])"},{"line_number":77,"context_line":"                raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_5aae0f2f","line":74,"in_reply_to":"9a80dd14_ff97d18d","updated":"2015-03-10 15:47:58.000000000","message":"Removed the block. Nothing should be done if \u0027type\u0027 is not an \u0027object\u0027 or \u0027container\u0027","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            return True"},{"line_number":100,"context_line":"        elif r.status_code \u003d\u003d 404:"},{"line_number":101,"context_line":"            return False"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            r.raise_for_status()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_snapshot(self, snapshot_name):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_1f958586","line":102,"updated":"2015-03-08 18:05:33.000000000","message":"This block has no unit test coverage.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            return True"},{"line_number":100,"context_line":"        elif r.status_code \u003d\u003d 404:"},{"line_number":101,"context_line":"            return False"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            r.raise_for_status()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_snapshot(self, snapshot_name):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e511e85d","line":102,"in_reply_to":"9a80dd14_1f958586","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            return snapshot_json[\u0027snapshots\u0027][0]"},{"line_number":112,"context_line":"        elif r.status_code \u003d\u003d 404:"},{"line_number":113,"context_line":"            return None"},{"line_number":114,"context_line":"        else:"},{"line_number":115,"context_line":"            r.raise_for_status()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def get_snapshots(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_7febe112","line":114,"updated":"2015-03-08 18:05:33.000000000","message":"This block has no unit test coverage.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            return snapshot_json[\u0027snapshots\u0027][0]"},{"line_number":112,"context_line":"        elif r.status_code \u003d\u003d 404:"},{"line_number":113,"context_line":"            return None"},{"line_number":114,"context_line":"        else:"},{"line_number":115,"context_line":"            r.raise_for_status()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def get_snapshots(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_00a8aad9","line":114,"in_reply_to":"9a80dd14_7febe112","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"c4d0c98a8a9bc97a55130de9d1b46b3b2249b5cf","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                                               new_relative_path)"},{"line_number":68,"context_line":"            elif item[\u0027type\u0027] \u003d\u003d \u0027object\u0027:"},{"line_number":69,"context_line":"                self.clone_file_from_snapshot(\u0027/ifs\u0027 + new_relative_path,"},{"line_number":70,"context_line":"                                              dest_item_path, snapshot_name)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def clone_file_from_snapshot(self, fq_file_path, fq_dest_path,"},{"line_number":73,"context_line":"                                 snapshot_name):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_b79a2f6c","line":70,"updated":"2015-03-12 11:23:35.000000000","message":"Case where item[\u0027type\u0027] is not \u0027object\u0027 and not \u0027container\u0027 is not covered. You sure you do not want to have here \"else\" clause with some actions?","commit_id":"9cc913ed53dacab2851834598f5f55790530a444"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"8579f0cca5d87512fe120396a6cb71b1fc770523","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                                               new_relative_path)"},{"line_number":68,"context_line":"            elif item[\u0027type\u0027] \u003d\u003d \u0027object\u0027:"},{"line_number":69,"context_line":"                self.clone_file_from_snapshot(\u0027/ifs\u0027 + new_relative_path,"},{"line_number":70,"context_line":"                                              dest_item_path, snapshot_name)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def clone_file_from_snapshot(self, fq_file_path, fq_dest_path,"},{"line_number":73,"context_line":"                                 snapshot_name):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_6958ce56","line":70,"in_reply_to":"9a80dd14_b79a2f6c","updated":"2015-03-12 16:24:27.000000000","message":"I am sure that is how I want it for this version of the driver. There is nothing to be done currently if the item type is not a container or object.","commit_id":"9cc913ed53dacab2851834598f5f55790530a444"}],"manila/tests/share/drivers/emc/plugins/isilon/test_isilon.py":[{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"124fd49e0eb57c8eac7c528148ea90652898edbe","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 EMC Corporation."},{"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":3,"id":"da86d52c_d7cf2827","line":1,"updated":"2015-02-12 18:42:55.000000000","message":"This file in this Patch Set only covers 81% of the lines in isilon.py, skipping a few methods altogether and also not testing most of the exception paths.  Can you add more negative tests, please?\n\nAlso, please add unit tests for isilon_api.py.","commit_id":"d6cc4abeddda6949140f5b3c758f1b389bd97eda"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 EMC Corporation."},{"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":4,"id":"ba7be1f8_cdea3273","line":1,"updated":"2015-02-26 13:22:48.000000000","message":"2014?","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 EMC Corporation."},{"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":4,"id":"ba7be1f8_bb63ea3f","line":1,"in_reply_to":"ba7be1f8_cdea3273","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# binary size constants"},{"line_number":27,"context_line":"ONE_KIB \u003d 1024"},{"line_number":28,"context_line":"ONE_MIB \u003d 1024 ** 2"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class IsilonTest(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_cd007268","line":28,"updated":"2015-02-26 13:22:48.000000000","message":"\"from oslo_utils import units\" - it contains required data.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# binary size constants"},{"line_number":27,"context_line":"ONE_KIB \u003d 1024"},{"line_number":28,"context_line":"ONE_MIB \u003d 1024 ** 2"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class IsilonTest(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_9bbc666e","line":28,"in_reply_to":"ba7be1f8_cd007268","updated":"2015-03-02 18:24:35.000000000","message":"Not needed, removed","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self._mock_isilon_api \u003d mock_isi_api.return_value"},{"line_number":67,"context_line":"        self.storage_connection \u003d isilon.IsilonStorageConnection(LOG)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # self.storage_connection._isilon_api_class \u003d self._mock_isilon_api"},{"line_number":70,"context_line":"        self.mock_context \u003d mock.Mock(\u0027Context\u0027)"},{"line_number":71,"context_line":"        self.mock_emc_driver \u003d mock.Mock(\u0027EmcDriver\u0027)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_0d3d2a2b","line":69,"updated":"2015-02-26 13:22:48.000000000","message":"?","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self._mock_isilon_api \u003d mock_isi_api.return_value"},{"line_number":67,"context_line":"        self.storage_connection \u003d isilon.IsilonStorageConnection(LOG)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # self.storage_connection._isilon_api_class \u003d self._mock_isilon_api"},{"line_number":70,"context_line":"        self.mock_context \u003d mock.Mock(\u0027Context\u0027)"},{"line_number":71,"context_line":"        self.mock_emc_driver \u003d mock.Mock(\u0027EmcDriver\u0027)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_9b638619","line":69,"in_reply_to":"ba7be1f8_0d3d2a2b","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"85fee941b80d443778e450f5ae5064cdd7c881cd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.storage_connection.connect("},{"line_number":75,"context_line":"            self.mock_emc_driver, self.mock_context)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def tearDown(self):"},{"line_number":78,"context_line":"        pass"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_allow_access_single_ip_nfs(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_8d7f5adf","line":77,"updated":"2015-02-26 13:22:48.000000000","message":"Why do you need it? Should be removed.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.storage_connection.connect("},{"line_number":75,"context_line":"            self.mock_emc_driver, self.mock_context)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def tearDown(self):"},{"line_number":78,"context_line":"        pass"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_allow_access_single_ip_nfs(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_5b810e8e","line":77,"in_reply_to":"ba7be1f8_8d7f5adf","updated":"2015-03-02 18:24:35.000000000","message":"Done","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d388e8a163d045d99463d01435fb408bd1b16ccf","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class IsilonTest(unittest.TestCase):"},{"line_number":28,"context_line":"    \"\"\"Integration test for the Isilon Manila driver.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    ISILON_ADDR \u003d \u002710.0.0.1\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_e98255ff","line":27,"updated":"2015-03-04 19:48:24.000000000","message":"manila.test.TestCase should be inherited.","commit_id":"56801ccf84ee4102ad701806b52306b1333fb5c3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d388e8a163d045d99463d01435fb408bd1b16ccf","unresolved":false,"context_lines":[{"line_number":524,"context_line":"        self.assertEqual("},{"line_number":525,"context_line":"            {\u0027driver_version\u0027: expected_version}, stats_dict)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"if __name__ \u003d\u003d \u0027main\u0027:"},{"line_number":528,"context_line":"    unittest.main()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_c994b139","line":527,"updated":"2015-03-04 19:48:24.000000000","message":"Should be removed and used as all existing test suites.","commit_id":"56801ccf84ee4102ad701806b52306b1333fb5c3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9f7b12c078c73afab0a54ed3ad0185f453a5fc68","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    CLONE_DIR \u003d ROOT_DIR + \u0027/clone-dir\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    class MockConfig(object):"},{"line_number":40,"context_line":"        def __init__(self):"},{"line_number":41,"context_line":"            pass"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        def safe_get(self, value):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_f4558fc6","line":40,"updated":"2015-03-05 18:35:10.000000000","message":"This __init__ is useless.","commit_id":"ec565c53308fb0c08cee2edb460d6119a5f4f583"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        share_server \u003d None"},{"line_number":76,"context_line":"        fake_export_id \u003d 1"},{"line_number":77,"context_line":"        self._mock_isilon_api.lookup_nfs_export.return_value \u003d fake_export_id"},{"line_number":78,"context_line":"        self._mock_isilon_api.get_nfs_export.return_value \u003d {"},{"line_number":79,"context_line":"            \u0027clients\u0027: []}"},{"line_number":80,"context_line":"        self.assertFalse(self._mock_isilon_api.request.called)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_1f3905d7","line":78,"updated":"2015-03-08 18:05:33.000000000","message":"No need to wrap here.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        share_server \u003d None"},{"line_number":76,"context_line":"        fake_export_id \u003d 1"},{"line_number":77,"context_line":"        self._mock_isilon_api.lookup_nfs_export.return_value \u003d fake_export_id"},{"line_number":78,"context_line":"        self._mock_isilon_api.get_nfs_export.return_value \u003d {"},{"line_number":79,"context_line":"            \u0027clients\u0027: []}"},{"line_number":80,"context_line":"        self.assertFalse(self._mock_isilon_api.request.called)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_74484ccc","line":78,"in_reply_to":"9a80dd14_1f3905d7","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        access \u003d {\u0027access_type\u0027: \u0027foo_access_type\u0027, \u0027access_to\u0027: \u002710.0.0.1\u0027}"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        self.assertRaises("},{"line_number":154,"context_line":"            exception.ShareBackendException,"},{"line_number":155,"context_line":"            self.storage_connection.deny_access,"},{"line_number":156,"context_line":"            self.mock_emc_driver, self.mock_context, share, access, None"},{"line_number":157,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_86ea1baa","line":154,"updated":"2015-03-07 18:28:40.000000000","message":"As mentioned in driver module - there is no need to raise error on delete operation of unsupported type, it could not be done on creation, so deletion should be silent return.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        access \u003d {\u0027access_type\u0027: \u0027foo_access_type\u0027, \u0027access_to\u0027: \u002710.0.0.1\u0027}"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        self.assertRaises("},{"line_number":154,"context_line":"            exception.ShareBackendException,"},{"line_number":155,"context_line":"            self.storage_connection.deny_access,"},{"line_number":156,"context_line":"            self.mock_emc_driver, self.mock_context, share, access, None"},{"line_number":157,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_975ce21a","line":154,"in_reply_to":"9a80dd14_86ea1baa","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        share \u003d {\u0027name\u0027: self.SHARE_NAME, \u0027share_proto\u0027: \u0027FOO\u0027}"},{"line_number":161,"context_line":"        access \u003d {\u0027access_type\u0027: \u0027ip\u0027, \u0027access_to\u0027: \u002710.0.0.1\u0027}"},{"line_number":162,"context_line":"        self.assertRaises("},{"line_number":163,"context_line":"            exception.InvalidShare, self.storage_connection.deny_access,"},{"line_number":164,"context_line":"            self.mock_emc_driver, self.mock_context, share, access, None"},{"line_number":165,"context_line":"        )"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_a6d2bffd","line":163,"updated":"2015-03-07 18:28:40.000000000","message":"same here.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        share \u003d {\u0027name\u0027: self.SHARE_NAME, \u0027share_proto\u0027: \u0027FOO\u0027}"},{"line_number":161,"context_line":"        access \u003d {\u0027access_type\u0027: \u0027ip\u0027, \u0027access_to\u0027: \u002710.0.0.1\u0027}"},{"line_number":162,"context_line":"        self.assertRaises("},{"line_number":163,"context_line":"            exception.InvalidShare, self.storage_connection.deny_access,"},{"line_number":164,"context_line":"            self.mock_emc_driver, self.mock_context, share, access, None"},{"line_number":165,"context_line":"        )"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_d7a1faf8","line":163,"in_reply_to":"9a80dd14_a6d2bffd","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        self.assertFalse(self._mock_isilon_api.create_nfs_export.called)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        # create the share"},{"line_number":302,"context_line":"        share \u003d {"},{"line_number":303,"context_line":"            \"name\": self.SHARE_NAME,"},{"line_number":304,"context_line":"            \"share_proto\": \u0027NFS\u0027"},{"line_number":305,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_5f2ffd87","line":302,"updated":"2015-03-08 18:05:33.000000000","message":"No need to wrap this dict.  Same in all subsequent tests.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        self.assertFalse(self._mock_isilon_api.create_nfs_export.called)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        # create the share"},{"line_number":302,"context_line":"        share \u003d {"},{"line_number":303,"context_line":"            \"name\": self.SHARE_NAME,"},{"line_number":304,"context_line":"            \"share_proto\": \u0027NFS\u0027"},{"line_number":305,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_57498a2f","line":302,"in_reply_to":"9a80dd14_5f2ffd87","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"665b65e275b12df5e86053ae478d596cd5b0cbb7","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        self.storage_connection.update_share_stats(stats_dict)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        expected_version \u003d isilon.VERSION"},{"line_number":523,"context_line":"        self.assertEqual("},{"line_number":524,"context_line":"            {\u0027driver_version\u0027: expected_version}, stats_dict)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_7f4f616b","line":523,"updated":"2015-03-08 18:05:33.000000000","message":"No need to wrap here.","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        self.storage_connection.update_share_stats(stats_dict)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        expected_version \u003d isilon.VERSION"},{"line_number":523,"context_line":"        self.assertEqual("},{"line_number":524,"context_line":"            {\u0027driver_version\u0027: expected_version}, stats_dict)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_b761e6aa","line":523,"in_reply_to":"9a80dd14_7f4f616b","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"}],"manila/tests/share/drivers/emc/plugins/isilon/test_isilon_api.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d388e8a163d045d99463d01435fb408bd1b16ccf","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"@ddt.ddt"},{"line_number":28,"context_line":"class IsilonApiTest(unittest.TestCase):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        self._mock_url \u003d \u0027https://localhost:8080\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_89aab96e","line":28,"updated":"2015-03-04 19:48:24.000000000","message":"ditto","commit_id":"56801ccf84ee4102ad701806b52306b1333fb5c3"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9f7b12c078c73afab0a54ed3ad0185f453a5fc68","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.isilon_api.clone_snapshot(snapshot_name, fq_target_dir)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # Verify calls needed to clone the source snapshot to the target dir"},{"line_number":116,"context_line":"        expected_calls \u003d []"},{"line_number":117,"context_line":"        expected_call \u003d IsilonApiTest.ExpectedCall("},{"line_number":118,"context_line":"            IsilonApiTest.ExpectedCall.DIR_CREATION,"},{"line_number":119,"context_line":"            self._mock_url + \u0027/namespace/ifs/admin/target?recursive\u003d\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_d4c96b7a","line":116,"updated":"2015-03-05 18:35:10.000000000","message":"Logic on lines 116-176 can be improved.\n\nYou do not use here cycles, but it will help a lot here.\n\nSee how it can look like:\n\n####################################################\n\nexpected_calls \u003d []\n\nclone_path_list \u003d [\n\n    \u0027file1\u0027, \u0027file2\u0027, \u0027dir1/file11\u0027, \u0027dir1/file12\u0027,\n\n    \u0027dir2/file21\u0027, \u0027dir2/file22\u0027]\n\nfor path in clone_path_list:\n\n    expected_calls.append(\n\n        expected_call \u003d IsilonApiTest.ExpectedCall(\n\n            IsilonApiTest.ExpectedCall.FILE_CLONE,\n\n            self._mock_url + \u0027/namespace/ifs/admin/target/\u0027 + path,\n\n            [\u0027/ifs/admin/target/\u0027 + path, \u0027/ifs/admin/source/\u0027 + path, snapshot_name])\n\ndir_path_list \u003d [\n\n    (\u0027/dir1?recursive\u0027, \u0027/dir1\u0027),\n\n    (\u0027/dir2?recursive\u0027, \u0027/dir2\u0027),\n\n    (\u0027?recursive\u003d\u0027, \u0027\u0027)]\n\nfor url, path in dir_path_list:\n\n    expected_calls.append(\n\n        expected_call \u003d IsilonApiTest.ExpectedCall(\n\n            IsilonApiTest.ExpectedCall.DIR_CREATION,\n\n            self._mock_url + \u0027/namespace/ifs/admin/target\u0027 + url,\n\n            [\u0027/ifs/admin/target\u0027 + path, False])\n\n####################################################","commit_id":"ec565c53308fb0c08cee2edb460d6119a5f4f583"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"71db6897490a96f3446854ebca7baab5ecbf1623","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import ddt"},{"line_number":19,"context_line":"import requests"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_e6d83720","line":16,"updated":"2015-03-07 18:28:40.000000000","message":"jsonutils from oslo?","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"862af1028ed805892e39bd077d78848f364bf75b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import json"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import ddt"},{"line_number":19,"context_line":"import requests"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_34d414eb","line":16,"in_reply_to":"9a80dd14_e6d83720","updated":"2015-03-10 15:47:58.000000000","message":"Done","commit_id":"40fd4557fd3320013c01549453540eb9120f8b9e"}],"test-requirements.txt":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"d043ce7f528208b0a88f5a1ad209444c90793ba0","unresolved":false,"context_lines":[{"line_number":15,"context_line":"oslosphinx\u003e\u003d2.2.0  # Apache-2.0"},{"line_number":16,"context_line":"psycopg2"},{"line_number":17,"context_line":"python-subunit\u003e\u003d0.0.18"},{"line_number":18,"context_line":"responses"},{"line_number":19,"context_line":"sphinx\u003e\u003d1.1.2,!\u003d1.2.0,!\u003d1.3b1,\u003c1.3"},{"line_number":20,"context_line":"testrepository\u003e\u003d0.0.18"},{"line_number":21,"context_line":"testtools\u003e\u003d0.9.36,!\u003d1.2.0"}],"source_content_type":"text/plain","patch_set":4,"id":"ba7be1f8_e6565005","line":18,"updated":"2015-02-25 22:49:47.000000000","message":"Gates will fail because \"responses\" is absent in requirements project. See: https://github.com/openstack/requirements/blob/master/global-requirements.txt","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"},{"author":{"_account_id":15077,"name":"Shaun Edwards","email":"shaun.edwards@emc.com","username":"sedwards"},"change_message_id":"6d8cac082b130b48676f6d4c9bb1ae9a98c7b305","unresolved":false,"context_lines":[{"line_number":15,"context_line":"oslosphinx\u003e\u003d2.2.0  # Apache-2.0"},{"line_number":16,"context_line":"psycopg2"},{"line_number":17,"context_line":"python-subunit\u003e\u003d0.0.18"},{"line_number":18,"context_line":"responses"},{"line_number":19,"context_line":"sphinx\u003e\u003d1.1.2,!\u003d1.2.0,!\u003d1.3b1,\u003c1.3"},{"line_number":20,"context_line":"testrepository\u003e\u003d0.0.18"},{"line_number":21,"context_line":"testtools\u003e\u003d0.9.36,!\u003d1.2.0"}],"source_content_type":"text/plain","patch_set":4,"id":"ba7be1f8_90571c02","line":18,"in_reply_to":"ba7be1f8_e6565005","updated":"2015-03-02 18:24:35.000000000","message":"Fixed. I wasn\u0027t aware of the global-requirements.txt. After looking at it, I noticed they already had an approved requests mocking library \"requests-mock\u003e\u003d0.5.1\". I refactored the \"test_isilon_api.py\" test to use that mocking library instead.","commit_id":"3ef3b7d0109de8e84d5af15fdaea4d2c6884ed70"}]}
