)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8202,"name":"chenzongliang","email":"chenzongliang@huawei.com","username":"zongliang"},"change_message_id":"d324d8f4fc05a99c39a47e16ccaf9ec0a35c3139","unresolved":false,"context_lines":[{"line_number":7,"context_line":"New Manila HDS HNAS Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds new Manila HDS HNAS Driver,"},{"line_number":10,"context_line":"according to blueprint."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0f9ae2a940df5415b93f6a6c5c2b0fac1cb062fd"},{"line_number":13,"context_line":"Implements: blueprint hds-hnas"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a4dcd0f_4a961840","line":10,"updated":"2015-08-06 13:03:11.000000000","message":"according to which blueprint?","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"dcb1cc9a023b4a1f68b21abf1352a03bedf9b051","unresolved":false,"context_lines":[{"line_number":7,"context_line":"New Manila HDS HNAS Driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds new Manila HDS HNAS Driver,"},{"line_number":10,"context_line":"according to blueprint."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0f9ae2a940df5415b93f6a6c5c2b0fac1cb062fd"},{"line_number":13,"context_line":"Implements: blueprint hds-hnas"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a4dcd0f_4c8866c5","line":10,"in_reply_to":"1a4dcd0f_4a961840","updated":"2015-08-06 17:34:35.000000000","message":"the one 3 lines below.","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"}],"manila/exception.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"7360731a1d6ff7bcb454c2509b85ef96f28fdf0b","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"class HNASBackendException(ManilaException):"},{"line_number":616,"context_line":"    message \u003d _(\"Hnas Backend Exception: %(msg)s\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_bfe561dc","line":616,"updated":"2015-08-07 14:29:12.000000000","message":"s/Hnas/HNAS","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"class HNASBackendException(ManilaException):"},{"line_number":616,"context_line":"    message \u003d _(\"Hnas Backend Exception: %(msg)s\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_49a0e290","line":616,"in_reply_to":"1a4dcd0f_966ba7f0","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"class HNASBackendException(ManilaException):"},{"line_number":616,"context_line":"    message \u003d _(\"Hnas Backend Exception: %(msg)s\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_966ba7f0","line":616,"in_reply_to":"1a4dcd0f_bfe561dc","updated":"2015-08-07 16:49:28.000000000","message":"+1","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"}],"manila/share/drivers/hds/hds_hnas.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4ce649506069e5a262d312d702fd650aa0ee187d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from manila import utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"import six"},{"line_number":27,"context_line":"from ssh import HNASSSH"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_6fb832c8","line":25,"updated":"2015-07-31 10:59:33.000000000","message":"why do you need to rename it?","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from manila import utils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo_config import cfg"},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"import six"},{"line_number":27,"context_line":"from ssh import HNASSSH"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bf62cc3b","line":25,"in_reply_to":"3a50d1a3_6fb832c8","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4ce649506069e5a262d312d702fd650aa0ee187d","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"share_opts \u003d ["},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ip\u0027,"},{"line_number":33,"context_line":"               default\u003dNone,"},{"line_number":34,"context_line":"               help\u003d\"HNAS management interface IP for communication\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_8fac9e8d","line":31,"updated":"2015-07-31 10:59:33.000000000","message":"These options should be included in manila/opts.py","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"share_opts \u003d ["},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ip\u0027,"},{"line_number":33,"context_line":"               default\u003dNone,"},{"line_number":34,"context_line":"               help\u003d\"HNAS management interface IP for communication\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5f59488d","line":31,"in_reply_to":"3a50d1a3_8fac9e8d","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"share_opts \u003d ["},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ip\u0027,"},{"line_number":33,"context_line":"               default\u003dNone,"},{"line_number":34,"context_line":"               help\u003d\"HNAS management interface IP for communication\""},{"line_number":35,"context_line":"                    \"between Manila controller and HNAS.\"),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027hds_hnas_user\u0027,"},{"line_number":37,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_53d9ed20","line":34,"updated":"2015-07-22 21:12:41.000000000","message":"space and the end of string","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":31,"context_line":"share_opts \u003d ["},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ip\u0027,"},{"line_number":33,"context_line":"               default\u003dNone,"},{"line_number":34,"context_line":"               help\u003d\"HNAS management interface IP for communication\""},{"line_number":35,"context_line":"                    \"between Manila controller and HNAS.\"),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027hds_hnas_user\u0027,"},{"line_number":37,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7f5c447d","line":34,"in_reply_to":"3a50d1a3_53d9ed20","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                    \"such as create file-systems and network interfaces.\"),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027hds_hnas_password\u0027,"},{"line_number":41,"context_line":"               default\u003dNone,"},{"line_number":42,"context_line":"               help\u003d\"HNAS password MD5 in order to perform tasks such\""},{"line_number":43,"context_line":"                    \"as create file-systems and network interfaces.\"),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027hds_hnas_evs_id\u0027,"},{"line_number":45,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_73d669f2","line":42,"updated":"2015-07-22 21:12:41.000000000","message":"space and the end of string","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                    \"such as create file-systems and network interfaces.\"),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027hds_hnas_password\u0027,"},{"line_number":41,"context_line":"               default\u003dNone,"},{"line_number":42,"context_line":"               help\u003d\"HNAS password MD5 in order to perform tasks such\""},{"line_number":43,"context_line":"                    \"as create file-systems and network interfaces.\"),"},{"line_number":44,"context_line":"    cfg.StrOpt(\u0027hds_hnas_evs_id\u0027,"},{"line_number":45,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1f542052","line":42,"in_reply_to":"3a50d1a3_73d669f2","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(HDSHNASDriver, self).__init__(False, *args, **kwargs)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        LOG.debug(\"Setting up attributes\")"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.configuration.append_config_values(share_opts)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        LOG.debug(\"Reading config parameters\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bdd042f7","line":76,"updated":"2015-07-22 21:12:41.000000000","message":"extra line","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        super(HDSHNASDriver, self).__init__(False, *args, **kwargs)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        LOG.debug(\"Setting up attributes\")"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        self.configuration.append_config_values(share_opts)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        LOG.debug(\"Reading config parameters\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_ff4854b5","line":76,"in_reply_to":"3a50d1a3_bdd042f7","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.configuration.append_config_values(share_opts)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        LOG.debug(\"Reading config parameters\")"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.backend_name \u003d self.configuration.safe_get(\u0027share_backend_name\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        hnas_ip \u003d self.configuration.safe_get(\u0027hds_hnas_ip\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_dd32ee5d","line":80,"updated":"2015-07-22 21:12:41.000000000","message":"extra line","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.configuration.append_config_values(share_opts)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        LOG.debug(\"Reading config parameters\")"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.backend_name \u003d self.configuration.safe_get(\u0027share_backend_name\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        hnas_ip \u003d self.configuration.safe_get(\u0027hds_hnas_ip\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bfc96c27","line":80,"in_reply_to":"3a50d1a3_dd32ee5d","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        LOG.debug(\"Reading config parameters\")"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.backend_name \u003d self.configuration.safe_get(\u0027share_backend_name\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        hnas_ip \u003d self.configuration.safe_get(\u0027hds_hnas_ip\u0027)"},{"line_number":84,"context_line":"        hnas_username \u003d self.configuration.safe_get(\u0027hds_hnas_user\u0027)"},{"line_number":85,"context_line":"        hnas_password \u003d self.configuration.safe_get(\u0027hds_hnas_password\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7d44fab5","line":82,"updated":"2015-07-22 21:12:41.000000000","message":"extra line","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        LOG.debug(\"Reading config parameters\")"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.backend_name \u003d self.configuration.safe_get(\u0027share_backend_name\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        hnas_ip \u003d self.configuration.safe_get(\u0027hds_hnas_ip\u0027)"},{"line_number":84,"context_line":"        hnas_username \u003d self.configuration.safe_get(\u0027hds_hnas_user\u0027)"},{"line_number":85,"context_line":"        hnas_password \u003d self.configuration.safe_get(\u0027hds_hnas_password\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9fc6f014","line":82,"in_reply_to":"3a50d1a3_7d44fab5","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self.private_storage \u003d kwargs.get(\u0027private_storage\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if None in (hnas_evs_id, self.hnas_evs_ip):"},{"line_number":97,"context_line":"            raise exception.ManilaException("},{"line_number":98,"context_line":"                \"One of the following configuration parameters are not set: \""},{"line_number":99,"context_line":"                \"hds_hnas_evs_id, hds_hnas_evs_ip.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_d87f5c15","line":96,"updated":"2015-07-22 21:12:41.000000000","message":"the exception message should be translated _(\"Message\")","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        self.private_storage \u003d kwargs.get(\u0027private_storage\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if None in (hnas_evs_id, self.hnas_evs_ip):"},{"line_number":97,"context_line":"            raise exception.ManilaException("},{"line_number":98,"context_line":"                \"One of the following configuration parameters are not set: \""},{"line_number":99,"context_line":"                \"hds_hnas_evs_id, hds_hnas_evs_ip.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5fd068c9","line":96,"in_reply_to":"3a50d1a3_d87f5c15","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.private_storage \u003d kwargs.get(\u0027private_storage\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if None in (hnas_evs_id, self.hnas_evs_ip):"},{"line_number":97,"context_line":"            raise exception.ManilaException("},{"line_number":98,"context_line":"                \"One of the following configuration parameters are not set: \""},{"line_number":99,"context_line":"                \"hds_hnas_evs_id, hds_hnas_evs_ip.\")"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f8281835","line":97,"updated":"2015-07-22 21:12:41.000000000","message":"InvalidParameterValue","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.private_storage \u003d kwargs.get(\u0027private_storage\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if None in (hnas_evs_id, self.hnas_evs_ip):"},{"line_number":97,"context_line":"            raise exception.ManilaException("},{"line_number":98,"context_line":"                \"One of the following configuration parameters are not set: \""},{"line_number":99,"context_line":"                \"hds_hnas_evs_id, hds_hnas_evs_ip.\")"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1fdbc0ee","line":97,"in_reply_to":"3a50d1a3_f8281835","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if None in (hnas_evs_id, self.hnas_evs_ip):"},{"line_number":97,"context_line":"            raise exception.ManilaException("},{"line_number":98,"context_line":"                \"One of the following configuration parameters are not set: \""},{"line_number":99,"context_line":"                \"hds_hnas_evs_id, hds_hnas_evs_ip.\")"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if hnas_ip is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_38a8c08c","line":98,"updated":"2015-07-22 21:12:41.000000000","message":"I don\u0027t like this idea of grouping the parameters. if possible handle then separately","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        if None in (hnas_evs_id, self.hnas_evs_ip):"},{"line_number":97,"context_line":"            raise exception.ManilaException("},{"line_number":98,"context_line":"                \"One of the following configuration parameters are not set: \""},{"line_number":99,"context_line":"                \"hds_hnas_evs_id, hds_hnas_evs_ip.\")"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if hnas_ip is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_dfe478ad","line":98,"in_reply_to":"3a50d1a3_38a8c08c","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e7c051485991dd02feb4b289941db9542831feb7","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            LOG.debug(\"Sending HNAS Request to allow access to share: \""},{"line_number":127,"context_line":"                      + six.text_type(share.__dict__))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            self.hnas.allow_access(share_id, access[\u0027access_to\u0027],"},{"line_number":130,"context_line":"                                   share[\u0027share_proto\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_4e713c75","line":127,"updated":"2015-07-23 02:08:36.000000000","message":"Please use string substitution instead of +.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            LOG.debug(\"Sending HNAS Request to allow access to share: \""},{"line_number":127,"context_line":"                      + six.text_type(share.__dict__))"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"            self.hnas.allow_access(share_id, access[\u0027access_to\u0027],"},{"line_number":130,"context_line":"                                   share[\u0027share_proto\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9fed9090","line":127,"in_reply_to":"3a50d1a3_4e713c75","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        else:"},{"line_number":136,"context_line":"            raise exception.InvalidShareAccess(reason\u003d\u0027Only NFS protocol and \u0027"},{"line_number":137,"context_line":"                                                      \u0027ip access type \u0027"},{"line_number":138,"context_line":"                                                      \u0027currently supported.\u0027)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):"},{"line_number":141,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_d838bcf0","line":138,"updated":"2015-07-22 21:12:41.000000000","message":"Not translated!","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        else:"},{"line_number":136,"context_line":"            raise exception.InvalidShareAccess(reason\u003d\u0027Only NFS protocol and \u0027"},{"line_number":137,"context_line":"                                                      \u0027ip access type \u0027"},{"line_number":138,"context_line":"                                                      \u0027currently supported.\u0027)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):"},{"line_number":141,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bff08c67","line":138,"in_reply_to":"3a50d1a3_d838bcf0","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":144,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            LOG.debug(\"Sending HNAS Request to deny access to share: \""},{"line_number":147,"context_line":"                      + six.text_type(share))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            self.hnas.deny_access(share_id, access[\u0027access_to\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_982794c9","line":146,"updated":"2015-07-22 21:12:41.000000000","message":"request","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":144,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            LOG.debug(\"Sending HNAS Request to deny access to share: \""},{"line_number":147,"context_line":"                      + six.text_type(share))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            self.hnas.deny_access(share_id, access[\u0027access_to\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1f02e03e","line":146,"in_reply_to":"3a50d1a3_982794c9","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            LOG.debug(\"Sending HNAS Request to deny access to share: \""},{"line_number":147,"context_line":"                      + six.text_type(share))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            self.hnas.deny_access(share_id, access[\u0027access_to\u0027],"},{"line_number":150,"context_line":"                                  share[\u0027share_proto\u0027], access[\u0027access_level\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_181aa47d","line":147,"updated":"2015-07-22 21:12:41.000000000","message":"Dont use +, use, LOG.debug(\"%(var)s\", {\"var\": var} )","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            LOG.debug(\"Sending HNAS Request to deny access to share: \""},{"line_number":147,"context_line":"                      + six.text_type(share))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"            self.hnas.deny_access(share_id, access[\u0027access_to\u0027],"},{"line_number":150,"context_line":"                                  share[\u0027share_proto\u0027], access[\u0027access_level\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_dffb1846","line":147,"in_reply_to":"3a50d1a3_181aa47d","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":154,"context_line":"        else:"},{"line_number":155,"context_line":"            LOG.warning(_LW(\u0027Only NFS protocol and ip\u0027"},{"line_number":156,"context_line":"                            \u0027 access type currently \u0027"},{"line_number":157,"context_line":"                            \u0027supported.\u0027))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_933c55c9","line":156,"updated":"2015-07-22 21:12:41.000000000","message":"This space should go in the line above.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":154,"context_line":"        else:"},{"line_number":155,"context_line":"            LOG.warning(_LW(\u0027Only NFS protocol and ip\u0027"},{"line_number":156,"context_line":"                            \u0027 access type currently \u0027"},{"line_number":157,"context_line":"                            \u0027supported.\u0027))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def create_snapshot(self, context, snapshot, share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_fff6145c","line":156,"in_reply_to":"3a50d1a3_933c55c9","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        share_id \u003d self._get_hnas_share_id(snapshot[\u0027share_id\u0027])"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        LOG.debug(\"The snapshot of share \" + snapshot[\u0027share_id\u0027] +"},{"line_number":163,"context_line":"                  \"will be created with id\" + snapshot[\u0027id\u0027])"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if self.hnas.create_snapshot(share_id, snapshot[\u0027id\u0027]):"},{"line_number":166,"context_line":"            LOG.info(_LI(\u0027Snapshot successfully created\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f37039a6","line":163,"updated":"2015-07-22 21:12:41.000000000","message":"Dont use +, use, LOG.debug(\"%(var)s\", {\"var\": var} )","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        share_id \u003d self._get_hnas_share_id(snapshot[\u0027share_id\u0027])"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        LOG.debug(\"The snapshot of share \" + snapshot[\u0027share_id\u0027] +"},{"line_number":163,"context_line":"                  \"will be created with id\" + snapshot[\u0027id\u0027])"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        if self.hnas.create_snapshot(share_id, snapshot[\u0027id\u0027]):"},{"line_number":166,"context_line":"            LOG.info(_LI(\u0027Snapshot successfully created\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9f94b0e8","line":163,"in_reply_to":"3a50d1a3_f37039a6","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            LOG.info(_LI(\u0027Snapshot successfully created\u0027))"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            LOG.error(_LE(\u0027Error in snapshot creation.\u0027))"},{"line_number":169,"context_line":"            raise exception.ManilaException(\"Share snapshot was not created.\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":172,"context_line":"        share_id \u003d self._get_hnas_share_id(snapshot[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_13d5a51a","line":169,"updated":"2015-07-22 21:12:41.000000000","message":"This should be raised in the backend layer, here you only catch it print any proper message, and raise again","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            LOG.info(_LI(\u0027Snapshot successfully created\u0027))"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            LOG.error(_LE(\u0027Error in snapshot creation.\u0027))"},{"line_number":169,"context_line":"            raise exception.ManilaException(\"Share snapshot was not created.\")"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":172,"context_line":"        share_id \u003d self._get_hnas_share_id(snapshot[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7fa1a445","line":169,"in_reply_to":"3a50d1a3_13d5a51a","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        LOG.debug(\"The snapshot \" + snapshot[\u0027id\u0027] +"},{"line_number":175,"context_line":"                  \"will be deleted. The related share ID is \""},{"line_number":176,"context_line":"                  + snapshot[\u0027share_id\u0027])"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        if self.hnas.delete_snapshot(share_id, snapshot[\u0027id\u0027]):"},{"line_number":179,"context_line":"            LOG.info(_LI(\u0027Snapshot successfully deleted\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_33da214d","line":176,"updated":"2015-07-22 21:12:41.000000000","message":"Dont use +, use, LOG.debug(\"%(var)s\", {\"var\": var} )","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        LOG.debug(\"The snapshot \" + snapshot[\u0027id\u0027] +"},{"line_number":175,"context_line":"                  \"will be deleted. The related share ID is \""},{"line_number":176,"context_line":"                  + snapshot[\u0027share_id\u0027])"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        if self.hnas.delete_snapshot(share_id, snapshot[\u0027id\u0027]):"},{"line_number":179,"context_line":"            LOG.info(_LI(\u0027Snapshot successfully deleted\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1f8980ca","line":176,"in_reply_to":"3a50d1a3_33da214d","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            LOG.info(_LI(\u0027Snapshot successfully deleted\u0027))"},{"line_number":180,"context_line":"        else:"},{"line_number":181,"context_line":"            LOG.error(_LE(\u0027Error in snapshot deletion.\u0027))"},{"line_number":182,"context_line":"            raise exception.ManilaException(\"Share snapshot was not deleted.\")"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":185,"context_line":"                                   share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f3dfd937","line":182,"updated":"2015-07-22 21:12:41.000000000","message":"Same","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            LOG.info(_LI(\u0027Snapshot successfully deleted\u0027))"},{"line_number":180,"context_line":"        else:"},{"line_number":181,"context_line":"            LOG.error(_LE(\u0027Error in snapshot deletion.\u0027))"},{"line_number":182,"context_line":"            raise exception.ManilaException(\"Share snapshot was not deleted.\")"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":185,"context_line":"                                   share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3f847caf","line":182,"in_reply_to":"3a50d1a3_f3dfd937","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":185,"context_line":"                                   share_server\u003dNone):"},{"line_number":186,"context_line":"        LOG.debug(\"Creating a new share from snapshot: \" +"},{"line_number":187,"context_line":"                  six.text_type(snapshot[\u0027id\u0027]))"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        ip \u003d self.hnas_evs_ip"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_73ec29f3","line":187,"updated":"2015-07-22 21:12:41.000000000","message":"Dont use +, use, LOG.debug(\"%(var)s\", {\"var\": var} )","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":185,"context_line":"                                   share_server\u003dNone):"},{"line_number":186,"context_line":"        LOG.debug(\"Creating a new share from snapshot: \" +"},{"line_number":187,"context_line":"                  six.text_type(snapshot[\u0027id\u0027]))"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        ip \u003d self.hnas_evs_ip"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_df9238f6","line":187,"in_reply_to":"3a50d1a3_73ec29f3","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e7c051485991dd02feb4b289941db9542831feb7","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        path \u003d self.hnas.create_share_from_snapshot(share, snapshot)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        if path:"},{"line_number":194,"context_line":"            LOG.debug(\"Share created successfully on path: \" + ip + \":\" + path)"},{"line_number":195,"context_line":"            return ip + \":\" + path"},{"line_number":196,"context_line":"        else:"},{"line_number":197,"context_line":"            raise exception.ManilaException(\"Share was not created\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_0efed4ad","line":194,"updated":"2015-07-23 02:08:36.000000000","message":"Use string substitution.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        path \u003d self.hnas.create_share_from_snapshot(share, snapshot)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        if path:"},{"line_number":194,"context_line":"            LOG.debug(\"Share created successfully on path: \" + ip + \":\" + path)"},{"line_number":195,"context_line":"            return ip + \":\" + path"},{"line_number":196,"context_line":"        else:"},{"line_number":197,"context_line":"            raise exception.ManilaException(\"Share was not created\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9fbb5075","line":194,"in_reply_to":"3a50d1a3_0efed4ad","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e7c051485991dd02feb4b289941db9542831feb7","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            LOG.debug(\"Share created successfully on path: \" + ip + \":\" + path)"},{"line_number":195,"context_line":"            return ip + \":\" + path"},{"line_number":196,"context_line":"        else:"},{"line_number":197,"context_line":"            raise exception.ManilaException(\"Share was not created\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":200,"context_line":"        LOG.debug(\"Creating share in HNAS: \" + six.text_type(share[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_8e28a434","line":197,"updated":"2015-07-23 02:08:36.000000000","message":"Need _","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            LOG.debug(\"Share created successfully on path: \" + ip + \":\" + path)"},{"line_number":195,"context_line":"            return ip + \":\" + path"},{"line_number":196,"context_line":"        else:"},{"line_number":197,"context_line":"            raise exception.ManilaException(\"Share was not created\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":200,"context_line":"        LOG.debug(\"Creating share in HNAS: \" + six.text_type(share[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bfbe4c62","line":197,"in_reply_to":"3a50d1a3_8e28a434","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e7c051485991dd02feb4b289941db9542831feb7","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            raise exception.ManilaException(\"Share was not created\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":200,"context_line":"        LOG.debug(\"Creating share in HNAS: \" + six.text_type(share[\u0027id\u0027]))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":203,"context_line":"            raise exception.ManilaException(\"Only NFS protocol \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_aed6c025","line":200,"updated":"2015-07-23 02:08:36.000000000","message":"Use string substitution.  Please fix all places.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            raise exception.ManilaException(\"Share was not created\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":200,"context_line":"        LOG.debug(\"Creating share in HNAS: \" + six.text_type(share[\u0027id\u0027]))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":203,"context_line":"            raise exception.ManilaException(\"Only NFS protocol \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5fb5c87b","line":200,"in_reply_to":"3a50d1a3_aed6c025","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e7c051485991dd02feb4b289941db9542831feb7","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        LOG.debug(\"Creating share in HNAS: \" + six.text_type(share[\u0027id\u0027]))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":203,"context_line":"            raise exception.ManilaException(\"Only NFS protocol \""},{"line_number":204,"context_line":"                                            \"is currently supported\")"},{"line_number":205,"context_line":"        ip \u003d self.hnas_evs_ip"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_8edf4439","line":203,"updated":"2015-07-23 02:08:36.000000000","message":"_(\"xxx\")\n\nPlease fix all places.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        LOG.debug(\"Creating share in HNAS: \" + six.text_type(share[\u0027id\u0027]))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":203,"context_line":"            raise exception.ManilaException(\"Only NFS protocol \""},{"line_number":204,"context_line":"                                            \"is currently supported\")"},{"line_number":205,"context_line":"        ip \u003d self.hnas_evs_ip"},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7fb8c475","line":203,"in_reply_to":"3a50d1a3_8edf4439","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        # network stuff"},{"line_number":262,"context_line":"        return 0"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    @utils.synchronized(\"hds_hnas_update_share_stats\", external\u003dTrue)"},{"line_number":265,"context_line":"    def _update_share_stats(self):"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        LOG.debug(\"Updating Backend Capability Information\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_d37f3d15","line":264,"updated":"2015-07-22 21:12:41.000000000","message":"Why do you need mutual exclusion here??","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4ce649506069e5a262d312d702fd650aa0ee187d","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        total_space, free_space \u003d self.hnas.get_stats()"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        data \u003d {\u0027share_backend_name\u0027: self.backend_name,"},{"line_number":272,"context_line":"                \u0027driver_handles_share_servers\u0027:"},{"line_number":273,"context_line":"                    self.driver_handles_share_servers,"},{"line_number":274,"context_line":"                \u0027vendor_name\u0027: \u0027HDS\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_4f8e9628","line":271,"updated":"2015-07-31 10:59:33.000000000","message":"http://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        total_space, free_space \u003d self.hnas.get_stats()"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        data \u003d {\u0027share_backend_name\u0027: self.backend_name,"},{"line_number":272,"context_line":"                \u0027driver_handles_share_servers\u0027:"},{"line_number":273,"context_line":"                    self.driver_handles_share_servers,"},{"line_number":274,"context_line":"                \u0027vendor_name\u0027: \u0027HDS\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_df80f88d","line":271,"in_reply_to":"3a50d1a3_4f8e9628","updated":"2015-07-31 19:58:19.000000000","message":"Thanks!","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        if evs_ip !\u003d self.hnas_evs_ip:"},{"line_number":302,"context_line":"            raise exception.ManilaException(\"The EVS IP \" +"},{"line_number":303,"context_line":"                                            six.text_type(evs_ip) +"},{"line_number":304,"context_line":"                                            \" is not configured\")"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        if self.backend_name not in share[\u0027host\u0027]:"},{"line_number":307,"context_line":"            raise exception.ManilaException(\"The backend passed in the host \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_93a535a3","line":304,"updated":"2015-07-22 21:12:41.000000000","message":"Dont use +, use, LOG.debug(\"%(var)s\", {\"var\": var} )","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        if evs_ip !\u003d self.hnas_evs_ip:"},{"line_number":302,"context_line":"            raise exception.ManilaException(\"The EVS IP \" +"},{"line_number":303,"context_line":"                                            six.text_type(evs_ip) +"},{"line_number":304,"context_line":"                                            \" is not configured\")"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        if self.backend_name not in share[\u0027host\u0027]:"},{"line_number":307,"context_line":"            raise exception.ManilaException(\"The backend passed in the host \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_ff7b74bc","line":304,"in_reply_to":"3a50d1a3_93a535a3","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        if self.backend_name not in share[\u0027host\u0027]:"},{"line_number":307,"context_line":"            raise exception.ManilaException(\"The backend passed in the host \""},{"line_number":308,"context_line":"                                            \"parameter (\" + share[\u0027host\u0027] +"},{"line_number":309,"context_line":"                                            \") is not configured\")"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        self.hnas.ensure_share(share_id, share[\u0027share_proto\u0027])"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_f39b5964","line":309,"updated":"2015-07-22 21:12:41.000000000","message":"Dont use +, use, LOG.debug(\"%(var)s\", {\"var\": var} )","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        if self.backend_name not in share[\u0027host\u0027]:"},{"line_number":307,"context_line":"            raise exception.ManilaException(\"The backend passed in the host \""},{"line_number":308,"context_line":"                                            \"parameter (\" + share[\u0027host\u0027] +"},{"line_number":309,"context_line":"                                            \") is not configured\")"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        self.hnas.ensure_share(share_id, share[\u0027share_proto\u0027])"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9f491091","line":309,"in_reply_to":"3a50d1a3_f39b5964","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"}],"manila/share/drivers/hds/ssh.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class HNASSSH():"},{"line_number":28,"context_line":"    def __init__(self, hnas_ip, hnas_username, hnas_password, ssh_private_key,"},{"line_number":29,"context_line":"                 cluster_admin_ip0, evs_id, evs_ip, fs_name):"},{"line_number":30,"context_line":"        self.ip \u003d hnas_ip"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_173ef8d9","line":27,"updated":"2015-07-22 21:12:41.000000000","message":"A better name for this would be: HNASSSHBackend","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class HNASSSH():"},{"line_number":28,"context_line":"    def __init__(self, hnas_ip, hnas_username, hnas_password, ssh_private_key,"},{"line_number":29,"context_line":"                 cluster_admin_ip0, evs_id, evs_ip, fs_name):"},{"line_number":30,"context_line":"        self.ip \u003d hnas_ip"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5f5708ca","line":27,"in_reply_to":"3a50d1a3_173ef8d9","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.sshpool \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_stats(self):"},{"line_number":42,"context_line":"        span_list \u003d self._get_span_list()"},{"line_number":43,"context_line":"        total_space \u003d 0"},{"line_number":44,"context_line":"        free_space \u003d 0"},{"line_number":45,"context_line":"        for item in span_list:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_292e3c43","line":42,"updated":"2015-07-22 21:12:41.000000000","message":"This should return the size and free space of the file system (self.fs_name), no the storage spans!","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.sshpool \u003d None"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_stats(self):"},{"line_number":42,"context_line":"        span_list \u003d self._get_span_list()"},{"line_number":43,"context_line":"        total_space \u003d 0"},{"line_number":44,"context_line":"        free_space \u003d 0"},{"line_number":45,"context_line":"        for item in span_list:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1f72e07c","line":42,"in_reply_to":"3a50d1a3_292e3c43","updated":"2015-07-31 19:58:19.000000000","message":"Yes, thanks! Now we return the file system\u0027s free space and capacity.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def allow_access(self, share_id, host, share_proto, permission\u003d\u0027rw\u0027):"},{"line_number":53,"context_line":"        # check if the share exists"},{"line_number":54,"context_line":"        self.ensure_share(share_id, share_proto)"},{"line_number":55,"context_line":"        check_share \u003d self._nfs_export_list(share_id)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # get the list that contains all the hosts allowed on the share"},{"line_number":58,"context_line":"        host_list \u003d check_share[0].export_configuration"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3d7bd28d","line":55,"updated":"2015-07-22 21:12:41.000000000","message":"this name is not making sense. check_share -\u003e export_list ??","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def allow_access(self, share_id, host, share_proto, permission\u003d\u0027rw\u0027):"},{"line_number":53,"context_line":"        # check if the share exists"},{"line_number":54,"context_line":"        self.ensure_share(share_id, share_proto)"},{"line_number":55,"context_line":"        check_share \u003d self._nfs_export_list(share_id)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # get the list that contains all the hosts allowed on the share"},{"line_number":58,"context_line":"        host_list \u003d check_share[0].export_configuration"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7f11a403","line":55,"in_reply_to":"3a50d1a3_3d7bd28d","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        return path"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def create_share(self, share_id, share_size, share_proto):"},{"line_number":111,"context_line":"        # Create a virtual volume with the specified quota"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            if self._vvol_create(share_id, share_size):"},{"line_number":114,"context_line":"                path \u003d \u0027/shares/\u0027 + share_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_490b888e","line":111,"updated":"2015-07-22 21:12:41.000000000","message":"This should be a docstring!","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        return path"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def create_share(self, share_id, share_size, share_proto):"},{"line_number":111,"context_line":"        # Create a virtual volume with the specified quota"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            if self._vvol_create(share_id, share_size):"},{"line_number":114,"context_line":"                path \u003d \u0027/shares/\u0027 + share_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1ff980c8","line":111,"in_reply_to":"3a50d1a3_490b888e","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def create_share(self, share_id, share_size, share_proto):"},{"line_number":111,"context_line":"        # Create a virtual volume with the specified quota"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            if self._vvol_create(share_id, share_size):"},{"line_number":114,"context_line":"                path \u003d \u0027/shares/\u0027 + share_id"},{"line_number":115,"context_line":"                # Create NFS export"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_89bf50a9","line":112,"updated":"2015-07-22 21:12:41.000000000","message":"Its not a good practice to call 2 functions inside a try/except block. You wont be able to determine which of the functions thrown the exception.\n\nIn this case here,  if _vvol_create() throws, you will catch and try to delete a volume that even wasn\u0027t crated.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def create_share(self, share_id, share_size, share_proto):"},{"line_number":111,"context_line":"        # Create a virtual volume with the specified quota"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            if self._vvol_create(share_id, share_size):"},{"line_number":114,"context_line":"                path \u003d \u0027/shares/\u0027 + share_id"},{"line_number":115,"context_line":"                # Create NFS export"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_df0238b4","line":112,"in_reply_to":"3a50d1a3_89bf50a9","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def create_share(self, share_id, share_size, share_proto):"},{"line_number":111,"context_line":"        # Create a virtual volume with the specified quota"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            if self._vvol_create(share_id, share_size):"},{"line_number":114,"context_line":"                path \u003d \u0027/shares/\u0027 + share_id"},{"line_number":115,"context_line":"                # Create NFS export"},{"line_number":116,"context_line":"                if self._nfs_export_add(share_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_ffa1e246","line":113,"updated":"2015-07-22 21:12:41.000000000","message":"_vvol_create() never returns false! if something go wrong an exception will be thrown and the execution will be interrupted anyway!","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def create_share(self, share_id, share_size, share_proto):"},{"line_number":111,"context_line":"        # Create a virtual volume with the specified quota"},{"line_number":112,"context_line":"        try:"},{"line_number":113,"context_line":"            if self._vvol_create(share_id, share_size):"},{"line_number":114,"context_line":"                path \u003d \u0027/shares/\u0027 + share_id"},{"line_number":115,"context_line":"                # Create NFS export"},{"line_number":116,"context_line":"                if self._nfs_export_add(share_id):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_fffdb4b1","line":113,"in_reply_to":"3a50d1a3_ffa1e246","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            if self._vvol_create(share_id, share_size):"},{"line_number":114,"context_line":"                path \u003d \u0027/shares/\u0027 + share_id"},{"line_number":115,"context_line":"                # Create NFS export"},{"line_number":116,"context_line":"                if self._nfs_export_add(share_id):"},{"line_number":117,"context_line":"                    # Return export path"},{"line_number":118,"context_line":"                    return path"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5f7fb6aa","line":116,"updated":"2015-07-22 21:12:41.000000000","message":"_nfs_export_add() never returns false","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            if self._vvol_create(share_id, share_size):"},{"line_number":114,"context_line":"                path \u003d \u0027/shares/\u0027 + share_id"},{"line_number":115,"context_line":"                # Create NFS export"},{"line_number":116,"context_line":"                if self._nfs_export_add(share_id):"},{"line_number":117,"context_line":"                    # Return export path"},{"line_number":118,"context_line":"                    return path"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9f2b5033","line":116,"in_reply_to":"3a50d1a3_5f7fb6aa","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e7c051485991dd02feb4b289941db9542831feb7","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                       share[\u0027id\u0027]]"},{"line_number":199,"context_line":"            output, _ \u003d self._execute(command)"},{"line_number":200,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":201,"context_line":"            if \u0027Cannot find any clonable files in the source directory\u0027 or \\"},{"line_number":202,"context_line":"               \u0027Source path: Cannot access\u0027 in e.stderr:"},{"line_number":203,"context_line":"                if self._nfs_export_add(share[\u0027id\u0027]):"},{"line_number":204,"context_line":"                    return path"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_0ec33458","line":201,"updated":"2015-07-23 02:08:36.000000000","message":"Use () instead of \\","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                       share[\u0027id\u0027]]"},{"line_number":199,"context_line":"            output, _ \u003d self._execute(command)"},{"line_number":200,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":201,"context_line":"            if \u0027Cannot find any clonable files in the source directory\u0027 or \\"},{"line_number":202,"context_line":"               \u0027Source path: Cannot access\u0027 in e.stderr:"},{"line_number":203,"context_line":"                if self._nfs_export_add(share[\u0027id\u0027]):"},{"line_number":204,"context_line":"                    return path"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7f28c433","line":201,"in_reply_to":"3a50d1a3_0ec33458","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def _nfs_export_del(self, share_id):"},{"line_number":286,"context_line":"        command \u003d [\u0027nfs-export\u0027, \u0027del\u0027, share_id]"},{"line_number":287,"context_line":"        output, _ \u003d self._execute(command)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _update_access_rule(self, share_id, host_list):"},{"line_number":290,"context_line":"        # mount the command line"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_022315a8","line":287,"updated":"2015-07-22 21:12:41.000000000","message":"out, err","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def _nfs_export_del(self, share_id):"},{"line_number":286,"context_line":"        command \u003d [\u0027nfs-export\u0027, \u0027del\u0027, share_id]"},{"line_number":287,"context_line":"        output, _ \u003d self._execute(command)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def _update_access_rule(self, share_id, host_list):"},{"line_number":290,"context_line":"        # mount the command line"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1f20a048","line":287,"in_reply_to":"3a50d1a3_022315a8","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"e7c051485991dd02feb4b289941db9542831feb7","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        try:"},{"line_number":306,"context_line":"            output, output1 \u003d self._execute(command)"},{"line_number":307,"context_line":"            if \"Export modified successfully\" in output \\"},{"line_number":308,"context_line":"                    or \"Exportcd ..\" \\"},{"line_number":309,"context_line":"                       \" modified successfully\" in output1:"},{"line_number":310,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_6eaaf886","line":307,"updated":"2015-07-23 02:08:36.000000000","message":"Same","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        try:"},{"line_number":306,"context_line":"            output, output1 \u003d self._execute(command)"},{"line_number":307,"context_line":"            if \"Export modified successfully\" in output \\"},{"line_number":308,"context_line":"                    or \"Exportcd ..\" \\"},{"line_number":309,"context_line":"                       \" modified successfully\" in output1:"},{"line_number":310,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_df19d823","line":307,"in_reply_to":"3a50d1a3_6eaaf886","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                    or \"Exportcd ..\" \\"},{"line_number":309,"context_line":"                       \" modified successfully\" in output1:"},{"line_number":310,"context_line":"                return True"},{"line_number":311,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":312,"context_line":"            raise e"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _nfs_export_list(self, share_id\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5dbc9e05","line":311,"updated":"2015-07-22 21:12:41.000000000","message":"No need to except.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                    or \"Exportcd ..\" \\"},{"line_number":309,"context_line":"                       \" modified successfully\" in output1:"},{"line_number":310,"context_line":"                return True"},{"line_number":311,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":312,"context_line":"            raise e"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _nfs_export_list(self, share_id\u003d\u0027\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bfd5ec1b","line":311,"in_reply_to":"3a50d1a3_5dbc9e05","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            try:"},{"line_number":363,"context_line":"                self._quota_add(vvol_name, vvol_quota)"},{"line_number":364,"context_line":"                return True"},{"line_number":365,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":366,"context_line":"                raise e"},{"line_number":367,"context_line":"        else:"},{"line_number":368,"context_line":"            raise processutils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_df0c26ee","line":365,"updated":"2015-07-22 21:12:41.000000000","message":"No need to catch this if you not doing anything with the exception!","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            try:"},{"line_number":363,"context_line":"                self._quota_add(vvol_name, vvol_quota)"},{"line_number":364,"context_line":"                return True"},{"line_number":365,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":366,"context_line":"                raise e"},{"line_number":367,"context_line":"        else:"},{"line_number":368,"context_line":"            raise processutils.ProcessExecutionError"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5fdce845","line":365,"in_reply_to":"3a50d1a3_df0c26ee","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":366,"context_line":"                raise e"},{"line_number":367,"context_line":"        else:"},{"line_number":368,"context_line":"            raise processutils.ProcessExecutionError"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def _quota_add(self, vvol_name, vvol_quota):"},{"line_number":371,"context_line":"        if vvol_quota \u003e 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_8c7c3eb6","line":368,"updated":"2015-07-22 21:12:41.000000000","message":"You should raise any other exception here! This is not a \u0027ProcessExecutionError\u0027\u0027.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            except processutils.ProcessExecutionError as e:"},{"line_number":366,"context_line":"                raise e"},{"line_number":367,"context_line":"        else:"},{"line_number":368,"context_line":"            raise processutils.ProcessExecutionError"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def _quota_add(self, vvol_name, vvol_quota):"},{"line_number":371,"context_line":"        if vvol_quota \u003e 0:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7fdf643a","line":368,"in_reply_to":"3a50d1a3_8c7c3eb6","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                       self.fs_name, \u0027/shares/\u0027, vvol_name]"},{"line_number":383,"context_line":"            output, _ \u003d self._execute(command)"},{"line_number":384,"context_line":"            return True"},{"line_number":385,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":386,"context_line":"            raise e"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    def _extend_quota(self, vvol_name, new_size):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1fa36eb3","line":385,"updated":"2015-07-22 21:12:41.000000000","message":"No need to catch this if you not doing anything with the exception!","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                       self.fs_name, \u0027/shares/\u0027, vvol_name]"},{"line_number":383,"context_line":"            output, _ \u003d self._execute(command)"},{"line_number":384,"context_line":"            return True"},{"line_number":385,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":386,"context_line":"            raise e"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    def _extend_quota(self, vvol_name, new_size):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1fe74013","line":385,"in_reply_to":"3a50d1a3_1fa36eb3","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def _check_fs(self):"},{"line_number":395,"context_line":"        command \u003d [\u0027filesystem-list\u0027]"},{"line_number":396,"context_line":"        output, _ \u003d self._execute(command)"},{"line_number":397,"context_line":"        try:"},{"line_number":398,"context_line":"            if self.fs_name in output:"},{"line_number":399,"context_line":"                items \u003d output.split(\u0027\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_093ee0d9","line":396,"updated":"2015-07-22 21:12:41.000000000","message":"out, err","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def _check_fs(self):"},{"line_number":395,"context_line":"        command \u003d [\u0027filesystem-list\u0027]"},{"line_number":396,"context_line":"        output, _ \u003d self._execute(command)"},{"line_number":397,"context_line":"        try:"},{"line_number":398,"context_line":"            if self.fs_name in output:"},{"line_number":399,"context_line":"                items \u003d output.split(\u0027\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_dff0f8cb","line":396,"in_reply_to":"3a50d1a3_093ee0d9","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        command \u003d [\u0027filesystem-list\u0027]"},{"line_number":396,"context_line":"        output, _ \u003d self._execute(command)"},{"line_number":397,"context_line":"        try:"},{"line_number":398,"context_line":"            if self.fs_name in output:"},{"line_number":399,"context_line":"                items \u003d output.split(\u0027\\n\u0027)"},{"line_number":400,"context_line":"                if len(items) \u003e 2:"},{"line_number":401,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_6c2d32a7","line":398,"updated":"2015-07-22 21:12:41.000000000","message":"This logic is not right. Imagine you have 2 filesystems: filesystem1, filesystem2. If you check for:  filesystem, file, system. All of then will return True.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        command \u003d [\u0027filesystem-list\u0027]"},{"line_number":396,"context_line":"        output, _ \u003d self._execute(command)"},{"line_number":397,"context_line":"        try:"},{"line_number":398,"context_line":"            if self.fs_name in output:"},{"line_number":399,"context_line":"                items \u003d output.split(\u0027\\n\u0027)"},{"line_number":400,"context_line":"                if len(items) \u003e 2:"},{"line_number":401,"context_line":"                    return True"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1fce6083","line":398,"in_reply_to":"3a50d1a3_6c2d32a7","updated":"2015-07-31 19:58:19.000000000","message":"You are right, Ive changed it to compare the whole name.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                    return True"},{"line_number":402,"context_line":"            else:"},{"line_number":403,"context_line":"                return False"},{"line_number":404,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":405,"context_line":"            raise e"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    def _check_vvol(self, vvol_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_4c32b660","line":404,"updated":"2015-07-22 21:12:41.000000000","message":"Why are you \u0027trying\u0027 and catching ProcessExecutionError here?? You are not calling any external function that should have exceptions handled.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                    return True"},{"line_number":402,"context_line":"            else:"},{"line_number":403,"context_line":"                return False"},{"line_number":404,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":405,"context_line":"            raise e"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    def _check_vvol(self, vvol_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3fc9dc79","line":404,"in_reply_to":"3a50d1a3_4c32b660","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        if \u0027The virtual volume does not exist\u0027 not in output:"},{"line_number":412,"context_line":"            return True"},{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            raise processutils.ProcessExecutionError"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def _check_quota(self, vvol_name):"},{"line_number":417,"context_line":"        command \u003d [\u0027quota\u0027, \u0027list\u0027, \u0027--verbose\u0027, self.fs_name, vvol_name]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_22d5f11a","line":414,"updated":"2015-07-22 21:12:41.000000000","message":"This is not a \u0027ProcessExecutionError\u0027\u0027. else: return False","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":411,"context_line":"        if \u0027The virtual volume does not exist\u0027 not in output:"},{"line_number":412,"context_line":"            return True"},{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            raise processutils.ProcessExecutionError"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def _check_quota(self, vvol_name):"},{"line_number":417,"context_line":"        command \u003d [\u0027quota\u0027, \u0027list\u0027, \u0027--verbose\u0027, self.fs_name, vvol_name]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_bfdf2c0b","line":414,"in_reply_to":"3a50d1a3_22d5f11a","updated":"2015-07-31 19:58:19.000000000","message":"When there is no vvol with this ID, we should raise an exception. Ive changed it to HNASBackendException and Im returning a more meaningful msg.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        if \u0027No quotas matching specified filter criteria\u0027 not in output:"},{"line_number":421,"context_line":"            return True"},{"line_number":422,"context_line":"        else:"},{"line_number":423,"context_line":"            raise processutils.ProcessExecutionError"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _check_export(self, vvol_name):"},{"line_number":426,"context_line":"        export \u003d self._nfs_export_list(vvol_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_e2a8698e","line":423,"updated":"2015-07-22 21:12:41.000000000","message":"This is not a \u0027ProcessExecutionError\u0027\u0027. else: return False","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        if \u0027No quotas matching specified filter criteria\u0027 not in output:"},{"line_number":421,"context_line":"            return True"},{"line_number":422,"context_line":"        else:"},{"line_number":423,"context_line":"            raise processutils.ProcessExecutionError"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def _check_export(self, vvol_name):"},{"line_number":426,"context_line":"        export \u003d self._nfs_export_list(vvol_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_9f035076","line":423,"in_reply_to":"3a50d1a3_e2a8698e","updated":"2015-07-31 19:58:19.000000000","message":"Same.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":428,"context_line":"           self.fs_name in export[0].file_system_label:"},{"line_number":429,"context_line":"            return True"},{"line_number":430,"context_line":"        else:"},{"line_number":431,"context_line":"            raise processutils.ProcessExecutionError"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def _filesystem_delete(self, fs_name):"},{"line_number":434,"context_line":"        # unmount the filesystem"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_228ad11b","line":431,"updated":"2015-07-22 21:12:41.000000000","message":"This is not a \u0027ProcessExecutionError\u0027\u0027. else: return False","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":428,"context_line":"           self.fs_name in export[0].file_system_label:"},{"line_number":429,"context_line":"            return True"},{"line_number":430,"context_line":"        else:"},{"line_number":431,"context_line":"            raise processutils.ProcessExecutionError"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def _filesystem_delete(self, fs_name):"},{"line_number":434,"context_line":"        # unmount the filesystem"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3ff31ca1","line":431,"in_reply_to":"3a50d1a3_228ad11b","updated":"2015-07-31 19:58:19.000000000","message":"Same.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def _get_span_list(self):"},{"line_number":448,"context_line":"        command \u003d [\u0027span-list\u0027]"},{"line_number":449,"context_line":"        output, _ \u003d self._execute(command)"},{"line_number":450,"context_line":"        items \u003d output.split(\u0027\\n\u0027)"},{"line_number":451,"context_line":"        span_list \u003d []"},{"line_number":452,"context_line":"        if len(items) \u003e 2:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_294f1c6c","line":449,"updated":"2015-07-22 21:12:41.000000000","message":"Please use a meaningful name for \u0027_\u0027, e.g. out, err. Also, this is the same name in a translation function \u0027_(\u0027msg\u0027)\u0027 in Openstack.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    def _get_span_list(self):"},{"line_number":448,"context_line":"        command \u003d [\u0027span-list\u0027]"},{"line_number":449,"context_line":"        output, _ \u003d self._execute(command)"},{"line_number":450,"context_line":"        items \u003d output.split(\u0027\\n\u0027)"},{"line_number":451,"context_line":"        span_list \u003d []"},{"line_number":452,"context_line":"        if len(items) \u003e 2:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_ffecd4bc","line":449,"in_reply_to":"3a50d1a3_294f1c6c","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4ce649506069e5a262d312d702fd650aa0ee187d","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            if \u0027Route not found\u0027 in e.stderr:"},{"line_number":477,"context_line":"                return True"},{"line_number":478,"context_line":"            else:"},{"line_number":479,"context_line":"                raise e"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def _get_share_quota(self, share_id):"},{"line_number":482,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_ef39a240","line":479,"updated":"2015-07-31 10:59:33.000000000","message":"Just \"raise\"","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            if \u0027Route not found\u0027 in e.stderr:"},{"line_number":477,"context_line":"                return True"},{"line_number":478,"context_line":"            else:"},{"line_number":479,"context_line":"                raise e"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def _get_share_quota(self, share_id):"},{"line_number":482,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_ff4374ad","line":479,"in_reply_to":"3a50d1a3_ef39a240","updated":"2015-07-31 19:58:19.000000000","message":"Driver is not using this function. It was deleted.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"                    return quota"},{"line_number":499,"context_line":"            else:"},{"line_number":500,"context_line":"                # Returns 1 if the quota is not set"},{"line_number":501,"context_line":"                return 1"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    def _get_vvol_list(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_624c59c8","line":500,"updated":"2015-07-22 21:12:41.000000000","message":"what if the quota is is 1? unlikely but might happen but this should return -1 or any non positive value.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":497,"context_line":""},{"line_number":498,"context_line":"                    return quota"},{"line_number":499,"context_line":"            else:"},{"line_number":500,"context_line":"                # Returns 1 if the quota is not set"},{"line_number":501,"context_line":"                return 1"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"    def _get_vvol_list(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_1f6d0032","line":500,"in_reply_to":"3a50d1a3_624c59c8","updated":"2015-07-31 19:58:19.000000000","message":"Now its return None, and who called this function use this return as needed.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":609,"context_line":""},{"line_number":610,"context_line":"class HNASSSHException(Exception):"},{"line_number":611,"context_line":"    message \u003d \"HNAS Command failed to run: %(command)s, \" \\"},{"line_number":612,"context_line":"              \"error: %(stderr)s, stdout: %(stdout)s\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_3d06721d","line":612,"updated":"2015-07-22 21:12:41.000000000","message":"This should go to manila/exception.py and should inherit from ManilaException","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":609,"context_line":""},{"line_number":610,"context_line":"class HNASSSHException(Exception):"},{"line_number":611,"context_line":"    message \u003d \"HNAS Command failed to run: %(command)s, \" \\"},{"line_number":612,"context_line":"              \"error: %(stderr)s, stdout: %(stdout)s\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_df76b805","line":612,"in_reply_to":"3a50d1a3_3d06721d","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"}],"manila/share/drivers/hitachi/hds_hnas.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"1950732c2e41dcd0a36263c59a166f52f6b4f523","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"share_opts \u003d ["},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ip\u0027,"},{"line_number":34,"context_line":"               default\u003dNone,"},{"line_number":35,"context_line":"               help\u003d\"HNAS management interface IP for communication \""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_ce7b68f3","line":32,"updated":"2015-07-31 22:09:57.000000000","message":"It is a good idea to rename from share_opts to something like hds_hnas_opts.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"share_opts \u003d ["},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ip\u0027,"},{"line_number":34,"context_line":"               default\u003dNone,"},{"line_number":35,"context_line":"               help\u003d\"HNAS management interface IP for communication \""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_7efad478","line":32,"in_reply_to":"3a50d1a3_ce7b68f3","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if self.hnas_evs_ip is None:"},{"line_number":98,"context_line":"            msg \u003d _(\"The config parameter hnas_hnas_evs_id is not set!\")"},{"line_number":99,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if hnas_ip is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_3b36b351","line":98,"updated":"2015-08-02 19:43:17.000000000","message":"hds_hnas_evs_ip","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if self.hnas_evs_ip is None:"},{"line_number":98,"context_line":"            msg \u003d _(\"The config parameter hnas_hnas_evs_id is not set!\")"},{"line_number":99,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if hnas_ip is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_3e6e8c2f","line":98,"in_reply_to":"3a50d1a3_3b36b351","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_password is None and ssh_private_key is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""},{"line_number":111,"context_line":"                    \"you need to set hds_hnas_password or ssh_private_key.\")"},{"line_number":112,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        LOG.debug(\"Initializing HNAS Layer\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_9b4587b5","line":111,"updated":"2015-08-02 19:43:17.000000000","message":"hds_hnas_ssh_private_key","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"01fb76a9e3250e5a1e4859d6abc159ad3a838d9e","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_password is None and ssh_private_key is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""},{"line_number":111,"context_line":"                    \"you need to set hds_hnas_password or ssh_private_key.\")"},{"line_number":112,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        LOG.debug(\"Initializing HNAS Layer\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_8f106550","line":111,"updated":"2015-08-03 14:37:08.000000000","message":"keep \u0027.\u0027 and \u0027!\u0027 consistent\n\nmsg \u003d _(\"The config parameter hds_hnas_user is not set!\")\nmsg \u003d _(\"Credentials configuration parameters missing: \"\n          \"you need to set hds_hnas_password or ssh_private_key.\")","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_password is None and ssh_private_key is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""},{"line_number":111,"context_line":"                    \"you need to set hds_hnas_password or ssh_private_key.\")"},{"line_number":112,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        LOG.debug(\"Initializing HNAS Layer\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_8e685ebc","line":111,"in_reply_to":"1a4dcd0f_8f106550","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_password is None and ssh_private_key is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""},{"line_number":111,"context_line":"                    \"you need to set hds_hnas_password or ssh_private_key.\")"},{"line_number":112,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        LOG.debug(\"Initializing HNAS Layer\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_5e6b581e","line":111,"in_reply_to":"3a50d1a3_9b4587b5","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"01fb76a9e3250e5a1e4859d6abc159ad3a838d9e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    \"you need to set hds_hnas_password or ssh_private_key.\")"},{"line_number":112,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        LOG.debug(\"Initializing HNAS Layer\")"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self.hnas \u003d HNASSSHBackend(hnas_ip, hnas_username, hnas_password,"},{"line_number":117,"context_line":"                                   ssh_private_key, cluster_admin_ip0,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_cfa98de1","line":114,"updated":"2015-08-03 14:37:08.000000000","message":"missing \u0027.\u0027 \n\nLOG.debug(\"Initializing HNAS Layer\")/LOG.debug(\"Initializing HNAS Layer.\")","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                    \"you need to set hds_hnas_password or ssh_private_key.\")"},{"line_number":112,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        LOG.debug(\"Initializing HNAS Layer\")"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self.hnas \u003d HNASSSHBackend(hnas_ip, hnas_username, hnas_password,"},{"line_number":117,"context_line":"                                   ssh_private_key, cluster_admin_ip0,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_6e5f120f","line":114,"in_reply_to":"1a4dcd0f_cfa98de1","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":131,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            LOG.debug(\"Sending HNAS Request to allow access to share: %(shr)s\","},{"line_number":134,"context_line":"                      {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            self.hnas.allow_access(share_id, access[\u0027access_to\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_5b129fb5","line":133,"updated":"2015-08-02 19:43:17.000000000","message":"End all log statements with \".\" for the purpose of consistency.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":131,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"            LOG.debug(\"Sending HNAS Request to allow access to share: %(shr)s\","},{"line_number":134,"context_line":"                      {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            self.hnas.allow_access(share_id, access[\u0027access_to\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_1e7b90bf","line":133,"in_reply_to":"3a50d1a3_5b129fb5","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            LOG.info(_LI(\"Access allowed successfully to share: %(shr)s.\"),"},{"line_number":141,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":142,"context_line":"        else:"},{"line_number":143,"context_line":"            msg \u003d _(\"Only NFS protocol and ip access type currently \""},{"line_number":144,"context_line":"                    \"supported.\")"},{"line_number":145,"context_line":"            raise exception.InvalidShareAccess(msg)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_db6d4f33","line":143,"updated":"2015-08-02 19:43:17.000000000","message":"s/ip/IP","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            LOG.info(_LI(\"Access allowed successfully to share: %(shr)s.\"),"},{"line_number":141,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":142,"context_line":"        else:"},{"line_number":143,"context_line":"            msg \u003d _(\"Only NFS protocol and ip access type currently \""},{"line_number":144,"context_line":"                    \"supported.\")"},{"line_number":145,"context_line":"            raise exception.InvalidShareAccess(msg)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_940d3f91","line":143,"in_reply_to":"3a50d1a3_db6d4f33","updated":"2015-08-03 18:19:18.000000000","message":"Done. Changed all places.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"            LOG.debug(\"Sending HNAS request to deny access to share:\""},{"line_number":161,"context_line":"                      \" %(shr_id)s\","},{"line_number":162,"context_line":"                      {\u0027shr_id\u0027: six.text_type(share[\u0027id\u0027])})"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"            self.hnas.deny_access(share_id, access[\u0027access_to\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_5b605f35","line":161,"updated":"2015-08-02 19:43:17.000000000","message":"ditto","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"            LOG.debug(\"Sending HNAS request to deny access to share:\""},{"line_number":161,"context_line":"                      \" %(shr_id)s\","},{"line_number":162,"context_line":"                      {\u0027shr_id\u0027: six.text_type(share[\u0027id\u0027])})"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"            self.hnas.deny_access(share_id, access[\u0027access_to\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_99deda3c","line":161,"in_reply_to":"3a50d1a3_5b605f35","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"01fb76a9e3250e5a1e4859d6abc159ad3a838d9e","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        share_id \u003d self._get_hnas_share_id(snapshot[\u0027share_id\u0027])"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        LOG.debug(\"The snapshot %(ss_sid)s will be deleted. The related \""},{"line_number":197,"context_line":"                  \"share ID is %(ss_id)s. \","},{"line_number":198,"context_line":"                  {\u0027ss_sid\u0027: snapshot[\u0027share_id\u0027],"},{"line_number":199,"context_line":"                   \u0027ss_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_ef5d69ed","line":197,"updated":"2015-08-03 14:37:08.000000000","message":"don\u0027t need space in the end of the sentence？","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        share_id \u003d self._get_hnas_share_id(snapshot[\u0027share_id\u0027])"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        LOG.debug(\"The snapshot %(ss_sid)s will be deleted. The related \""},{"line_number":197,"context_line":"                  \"share ID is %(ss_id)s. \","},{"line_number":198,"context_line":"                  {\u0027ss_sid\u0027: snapshot[\u0027share_id\u0027],"},{"line_number":199,"context_line":"                   \u0027ss_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_0e820e53","line":197,"in_reply_to":"1a4dcd0f_ef5d69ed","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"fb3197ff759f2ab7ea39177cead2f3909eea2c66","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        if strutils.bool_from_string(driver_mode):"},{"line_number":358,"context_line":"            msg \u003d _(\"%(mode)s !\u003d False\") % {"},{"line_number":359,"context_line":"                \u0027mode\u0027: const.ExtraSpecs.DRIVER_HANDLES_SHARE_SERVERS"},{"line_number":360,"context_line":"            }"},{"line_number":361,"context_line":"            raise exception.ManageExistingShareTypeMismatch(msg)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_495bb686","line":360,"updated":"2015-08-03 02:46:21.000000000","message":"According to unit tests looks like this part of code is not covered by unit tests.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        if strutils.bool_from_string(driver_mode):"},{"line_number":358,"context_line":"            msg \u003d _(\"%(mode)s !\u003d False\") % {"},{"line_number":359,"context_line":"                \u0027mode\u0027: const.ExtraSpecs.DRIVER_HANDLES_SHARE_SERVERS"},{"line_number":360,"context_line":"            }"},{"line_number":361,"context_line":"            raise exception.ManageExistingShareTypeMismatch(msg)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_346eab2f","line":360,"in_reply_to":"3a50d1a3_495bb686","updated":"2015-08-03 18:19:18.000000000","message":"Implemented new unit test to cover this part.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"fb3197ff759f2ab7ea39177cead2f3909eea2c66","unresolved":false,"context_lines":[{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        if self.backend_name not in share[\u0027host\u0027]:"},{"line_number":381,"context_line":"            msg \u003d _(\"The backend passed in the host parameter (%(shr)s) is \""},{"line_number":382,"context_line":"                    \"not configured.\") % {\u0027shr\u0027: share[\u0027host\u0027]}"},{"line_number":383,"context_line":"            raise exception.ManilaException(msg)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        output \u003d self.hnas.manage_existing(share, share_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_6960f235","line":382,"updated":"2015-08-03 02:46:21.000000000","message":"According to unit tests looks like this part of code is not covered by unit tests.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        if self.backend_name not in share[\u0027host\u0027]:"},{"line_number":381,"context_line":"            msg \u003d _(\"The backend passed in the host parameter (%(shr)s) is \""},{"line_number":382,"context_line":"                    \"not configured.\") % {\u0027shr\u0027: share[\u0027host\u0027]}"},{"line_number":383,"context_line":"            raise exception.ManilaException(msg)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        output \u003d self.hnas.manage_existing(share, share_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_cfe254d5","line":382,"in_reply_to":"3a50d1a3_6960f235","updated":"2015-08-03 18:19:18.000000000","message":"Implemented new unit test to cover this part.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"086ecdbf0bc53f4d7fdce6b3c123e66e8b8d67d2","unresolved":false,"context_lines":[{"line_number":357,"context_line":"            const.ExtraSpecs.DRIVER_HANDLES_SHARE_SERVERS)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        if strutils.bool_from_string(driver_mode):"},{"line_number":360,"context_line":"            msg \u003d _(\"%(mode)s !\u003d False\") % {"},{"line_number":361,"context_line":"                \u0027mode\u0027: const.ExtraSpecs.DRIVER_HANDLES_SHARE_SERVERS"},{"line_number":362,"context_line":"            }"},{"line_number":363,"context_line":"            raise exception.ManageExistingShareTypeMismatch(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_d1d02656","line":360,"updated":"2015-08-04 10:12:47.000000000","message":"Add \u0027.\u0027 int the end","commit_id":"18178fbd6bf42f62f48d4c52daa51590f3246ff3"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"bc776f48ba5bd013a2b31dc1f0cb027bb76538de","unresolved":false,"context_lines":[{"line_number":357,"context_line":"            const.ExtraSpecs.DRIVER_HANDLES_SHARE_SERVERS)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        if strutils.bool_from_string(driver_mode):"},{"line_number":360,"context_line":"            msg \u003d _(\"%(mode)s !\u003d False\") % {"},{"line_number":361,"context_line":"                \u0027mode\u0027: const.ExtraSpecs.DRIVER_HANDLES_SHARE_SERVERS"},{"line_number":362,"context_line":"            }"},{"line_number":363,"context_line":"            raise exception.ManageExistingShareTypeMismatch(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_da8d9632","line":360,"in_reply_to":"1a4dcd0f_d1d02656","updated":"2015-08-05 14:24:52.000000000","message":"Done","commit_id":"18178fbd6bf42f62f48d4c52daa51590f3246ff3"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"d9a818c1f60dff82a5c54975aba873650acb9196","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        old_path_info \u003d share[\u0027export_locations\u0027][0][\u0027path\u0027].split(\u0027:\u0027)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        evs_ip \u003d old_path_info[0]"},{"line_number":375,"context_line":"        share_id \u003d old_path_info[1].split(\u0027/\u0027)[2]"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        if evs_ip !\u003d self.hnas_evs_ip:"},{"line_number":378,"context_line":"            msg \u003d _(\"The EVS IP %(evs)s is not \""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_1cf6a88f","line":375,"updated":"2015-08-04 09:07:47.000000000","message":"If the old_path_info length is equal to 1. This code will be thrown exception. But there is no clear reason.\n\nMaybe you could add the follow code:\nif len(old_path_info) \u003d\u003d 2:\n   ....","commit_id":"18178fbd6bf42f62f48d4c52daa51590f3246ff3"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"bc776f48ba5bd013a2b31dc1f0cb027bb76538de","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        old_path_info \u003d share[\u0027export_locations\u0027][0][\u0027path\u0027].split(\u0027:\u0027)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        evs_ip \u003d old_path_info[0]"},{"line_number":375,"context_line":"        share_id \u003d old_path_info[1].split(\u0027/\u0027)[2]"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        if evs_ip !\u003d self.hnas_evs_ip:"},{"line_number":378,"context_line":"            msg \u003d _(\"The EVS IP %(evs)s is not \""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_730cad94","line":375,"in_reply_to":"1a4dcd0f_1cf6a88f","updated":"2015-08-05 14:24:52.000000000","message":"Done","commit_id":"18178fbd6bf42f62f48d4c52daa51590f3246ff3"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"be0d43a0d062eb18d6db79ce44cc3ff4d192c3ac","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                    \"such as create file-systems and network interfaces.\"),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027hds_hnas_password\u0027,"},{"line_number":43,"context_line":"               default\u003dNone,"},{"line_number":44,"context_line":"               help\u003d\"HNAS password MD5 in order to perform tasks such \""},{"line_number":45,"context_line":"                    \"as create file-systems and network interfaces.\"),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027hds_hnas_evs_id\u0027,"},{"line_number":47,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_764740bc","line":44,"updated":"2015-08-06 12:47:09.000000000","message":"You are not sending the MD5 as password. This sentence can confuse the user. Use: HNAS user password.","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"d6bda10628ae7e3b885dfe3a10bc8a91c0289eca","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                    \"such as create file-systems and network interfaces.\"),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027hds_hnas_password\u0027,"},{"line_number":43,"context_line":"               default\u003dNone,"},{"line_number":44,"context_line":"               help\u003d\"HNAS password MD5 in order to perform tasks such \""},{"line_number":45,"context_line":"                    \"as create file-systems and network interfaces.\"),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027hds_hnas_evs_id\u0027,"},{"line_number":47,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_a3dfc767","line":44,"in_reply_to":"1a4dcd0f_764740bc","updated":"2015-08-06 17:49:13.000000000","message":"Done","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"be0d43a0d062eb18d6db79ce44cc3ff4d192c3ac","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               help\u003d\"Specify file-system name for creating shares.\"),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ssh_private_key\u0027,"},{"line_number":56,"context_line":"               default\u003dNone,"},{"line_number":57,"context_line":"               help\u003d\"RSA/DSA private key used to connect into HNAS\"),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027hds_hnas_cluster_admin_ip0\u0027,"},{"line_number":59,"context_line":"               default\u003dNone,"},{"line_number":60,"context_line":"               help\u003d\"The IP of the clusters admin node. Only set in HNAS \""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_f69cb00f","line":57,"updated":"2015-08-06 12:47:09.000000000","message":"\u0027.\u0027, just to keep consistency with all other help strings","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"d6bda10628ae7e3b885dfe3a10bc8a91c0289eca","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               help\u003d\"Specify file-system name for creating shares.\"),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ssh_private_key\u0027,"},{"line_number":56,"context_line":"               default\u003dNone,"},{"line_number":57,"context_line":"               help\u003d\"RSA/DSA private key used to connect into HNAS\"),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027hds_hnas_cluster_admin_ip0\u0027,"},{"line_number":59,"context_line":"               default\u003dNone,"},{"line_number":60,"context_line":"               help\u003d\"The IP of the clusters admin node. Only set in HNAS \""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_239df7bb","line":57,"in_reply_to":"1a4dcd0f_f69cb00f","updated":"2015-08-06 17:49:13.000000000","message":"Done","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"7360731a1d6ff7bcb454c2509b85ef96f28fdf0b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_log import log"},{"line_number":27,"context_line":"from oslo_utils import strutils"},{"line_number":28,"context_line":"import six"},{"line_number":29,"context_line":"from ssh import HNASSSHBackend"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_13180ed2","line":29,"updated":"2015-08-07 14:29:12.000000000","message":"Please let the import class order consistent with the other files.\n\n from oslo_config import cfg\n from oslo_log import log\n from oslo_utils import strutils\n import six\n from ssh import HNASSSHBackend\n\n from manila.common import constants as const\n from manila import exception\n from manila.i18n import _\n from manila.i18n import _LI\n from manila.i18n import _LW\n from manila.share import driver\n from manila.share import share_types\n from manila import utils","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_log import log"},{"line_number":27,"context_line":"from oslo_utils import strutils"},{"line_number":28,"context_line":"import six"},{"line_number":29,"context_line":"from ssh import HNASSSHBackend"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_b63ca3e1","line":29,"in_reply_to":"1a4dcd0f_13180ed2","updated":"2015-08-07 16:49:28.000000000","message":"+1, see http://docs.openstack.org/developer/hacking/#imports","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from oslo_log import log"},{"line_number":27,"context_line":"from oslo_utils import strutils"},{"line_number":28,"context_line":"import six"},{"line_number":29,"context_line":"from ssh import HNASSSHBackend"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_690b5e7e","line":29,"in_reply_to":"1a4dcd0f_b63ca3e1","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":71,"context_line":"        \"\"\"Do initialization.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        LOG.debug(\"Invoking base constructor.\")"},{"line_number":74,"context_line":"        super(HDSHNASDriver, self).__init__(False, *args, **kwargs)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        LOG.debug(\"Setting up attributes.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_5116894c","line":73,"updated":"2015-08-07 16:49:28.000000000","message":"In real deployment with more than one backend it will be not obvious which constructor. Better to provide \"backend name\" here.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":71,"context_line":"        \"\"\"Do initialization.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        LOG.debug(\"Invoking base constructor.\")"},{"line_number":74,"context_line":"        super(HDSHNASDriver, self).__init__(False, *args, **kwargs)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        LOG.debug(\"Setting up attributes.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_e41c756c","line":73,"in_reply_to":"1a4dcd0f_5116894c","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        LOG.debug(\"Invoking base constructor.\")"},{"line_number":74,"context_line":"        super(HDSHNASDriver, self).__init__(False, *args, **kwargs)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        LOG.debug(\"Setting up attributes.\")"},{"line_number":77,"context_line":"        self.configuration.append_config_values(hds_hnas_opts)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        LOG.debug(\"Reading config parameters.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_111c8168","line":76,"updated":"2015-08-07 16:49:28.000000000","message":"same here.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        LOG.debug(\"Invoking base constructor.\")"},{"line_number":74,"context_line":"        super(HDSHNASDriver, self).__init__(False, *args, **kwargs)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        LOG.debug(\"Setting up attributes.\")"},{"line_number":77,"context_line":"        self.configuration.append_config_values(hds_hnas_opts)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        LOG.debug(\"Reading config parameters.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_041ac16e","line":76,"in_reply_to":"1a4dcd0f_111c8168","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"7360731a1d6ff7bcb454c2509b85ef96f28fdf0b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if self.hnas_evs_ip is None:"},{"line_number":98,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_evs_id is not set.\")"},{"line_number":99,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if hnas_ip is None:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_82cdae67","line":98,"updated":"2015-08-07 14:29:12.000000000","message":"s/hds_hnas_evs_id/hds_hnas_evs_ip","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if self.hnas_evs_ip is None:"},{"line_number":98,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_evs_id is not set.\")"},{"line_number":99,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if hnas_ip is None:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_041721ee","line":98,"in_reply_to":"1a4dcd0f_82cdae67","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"7360731a1d6ff7bcb454c2509b85ef96f28fdf0b","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        if hnas_username is None:"},{"line_number":106,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_user is not set.\")"},{"line_number":107,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_password is None and ssh_private_key is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_a20a2a24","line":107,"updated":"2015-08-07 14:29:12.000000000","message":"The code(line 93~107) are very similar. May be you could integration of the code(line 93~107) for a function.\nsuch as:\n\ndef check_config_parameter(self, param)\n    if param is None:\n        msg \u003d _(\"The config parameter %s is not set.\", param)\n        raise exception.InvalidParameterValue(msg)","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"9f9b723c071c5887102f28ce0d6e04131c73307d","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        if hnas_username is None:"},{"line_number":106,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_user is not set.\")"},{"line_number":107,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_password is None and ssh_private_key is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_cfebcd77","line":107,"in_reply_to":"1a4dcd0f_a20a2a24","updated":"2015-08-07 19:07:53.000000000","message":"How do you print the name of the param?","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                                    \u0027ss_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        self.hnas.create_snapshot(share_id, snapshot[\u0027id\u0027])"},{"line_number":187,"context_line":"        LOG.info(_LI(\u0027Snapshot successfully created.\u0027))"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":190,"context_line":"        \"\"\"Deletes snapshot."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_716625ee","line":187,"updated":"2015-08-07 16:49:28.000000000","message":"ID of a snapshot.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                                    \u0027ss_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        self.hnas.create_snapshot(share_id, snapshot[\u0027id\u0027])"},{"line_number":187,"context_line":"        LOG.info(_LI(\u0027Snapshot successfully created.\u0027))"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def delete_snapshot(self, context, snapshot, share_server\u003dNone):"},{"line_number":190,"context_line":"        \"\"\"Deletes snapshot."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_2477bdd5","line":187,"in_reply_to":"1a4dcd0f_716625ee","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                   \u0027ss_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        self.hnas.delete_snapshot(share_id, snapshot[\u0027id\u0027])"},{"line_number":203,"context_line":"        LOG.info(_LI(\u0027Snapshot successfully deleted.\u0027))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":206,"context_line":"                                   share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_d17619a3","line":203,"updated":"2015-08-07 16:49:28.000000000","message":"ID of a snapshot.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                   \u0027ss_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        self.hnas.delete_snapshot(share_id, snapshot[\u0027id\u0027])"},{"line_number":203,"context_line":"        LOG.info(_LI(\u0027Snapshot successfully deleted.\u0027))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":206,"context_line":"                                   share_server\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_447449ce","line":203,"in_reply_to":"1a4dcd0f_d17619a3","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                  {\u0027ip\u0027: ip, \u0027path\u0027: path})"},{"line_number":224,"context_line":"        return ip + \":\" + path"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":227,"context_line":"        \"\"\"Creates share."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        :param context: It will be used to access db."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_913f3186","line":226,"updated":"2015-08-07 16:49:28.000000000","message":"Intuitively I expect share create/delete method be defined above the snapshot ones. As it is the core feature of a driver.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                  {\u0027ip\u0027: ip, \u0027path\u0027: path})"},{"line_number":224,"context_line":"        return ip + \":\" + path"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def create_share(self, context, share, share_server\u003dNone):"},{"line_number":227,"context_line":"        \"\"\"Creates share."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        :param context: It will be used to access db."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_16ff5202","line":226,"in_reply_to":"1a4dcd0f_913f3186","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":386,"context_line":"                    \"configured.\") % {\u0027evs\u0027: six.text_type(evs_ip)}"},{"line_number":387,"context_line":"            raise exception.ManilaException(msg)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        if str(self.backend_name) not in share[\u0027host\u0027]:"},{"line_number":390,"context_line":"            msg \u003d _(\"The backend passed in the host parameter (%(shr)s) is \""},{"line_number":391,"context_line":"                    \"not configured.\") % {\u0027shr\u0027: share[\u0027host\u0027]}"},{"line_number":392,"context_line":"            raise exception.ManilaException(msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_711e250d","line":389,"updated":"2015-08-07 16:49:28.000000000","message":"s/str/six.text_type/","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":386,"context_line":"                    \"configured.\") % {\u0027evs\u0027: six.text_type(evs_ip)}"},{"line_number":387,"context_line":"            raise exception.ManilaException(msg)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        if str(self.backend_name) not in share[\u0027host\u0027]:"},{"line_number":390,"context_line":"            msg \u003d _(\"The backend passed in the host parameter (%(shr)s) is \""},{"line_number":391,"context_line":"                    \"not configured.\") % {\u0027shr\u0027: share[\u0027host\u0027]}"},{"line_number":392,"context_line":"            raise exception.ManilaException(msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_169bd2ca","line":389,"in_reply_to":"1a4dcd0f_711e250d","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_log import log"},{"line_number":18,"context_line":"from oslo_utils import strutils"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":"from ssh import HNASSSHBackend"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from manila.common import constants as const"},{"line_number":23,"context_line":"from manila import exception"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_bebe3ffd","line":20,"updated":"2015-08-11 12:02:32.000000000","message":"from manila.share.drivers.hitachi import ssh ?\n\nAs you do in https://review.openstack.org/#/c/204692/12/manila/tests/share/drivers/hitachi/test_hds_hnas.py","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        LOG.debug(\"Initializing HNAS Layer.\")"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        self.hnas \u003d HNASSSHBackend(hnas_ip, hnas_username, hnas_password,"},{"line_number":118,"context_line":"                                   ssh_private_key, cluster_admin_ip0,"},{"line_number":119,"context_line":"                                   hnas_evs_id, self.hnas_evs_ip, fs_name)"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_7e3757b0","line":117,"updated":"2015-08-11 12:02:32.000000000","message":"ssh.HNASSSHBackend","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                             access[\u0027access_type\u0027].lower()):"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"            LOG.debug(\"Sending HNAS Request to allow access to share: \""},{"line_number":135,"context_line":"                      \"%(shr)s.\", {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"            self.hnas.allow_access(share_id, access[\u0027access_to\u0027],"},{"line_number":138,"context_line":"                                   share[\u0027share_proto\u0027],"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_3e578f03","line":135,"updated":"2015-08-11 12:02:32.000000000","message":"Operation \"six.text_type(share.__dict__)\" is performed twice - here and on line 142.\n\nBetter to use here some var for it.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               help\u003d\"Specify file-system name for creating shares.\"),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ssh_private_key\u0027,"},{"line_number":55,"context_line":"               default\u003dNone,"},{"line_number":56,"context_line":"               help\u003d\"RSA/DSA private key used to connect into HNAS.\"),"},{"line_number":57,"context_line":"    cfg.StrOpt(\u0027hds_hnas_cluster_admin_ip0\u0027,"},{"line_number":58,"context_line":"               default\u003dNone,"},{"line_number":59,"context_line":"               help\u003d\"The IP of the clusters admin node. Only set in HNAS \""}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_229db565","line":56,"updated":"2015-08-13 16:58:56.000000000","message":"Please, add info, whether this opt is required or optional. Same for password. Can admin set just one of these?","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"               help\u003d\"Specify file-system name for creating shares.\"),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ssh_private_key\u0027,"},{"line_number":55,"context_line":"               default\u003dNone,"},{"line_number":56,"context_line":"               help\u003d\"RSA/DSA private key used to connect into HNAS.\"),"},{"line_number":57,"context_line":"    cfg.StrOpt(\u0027hds_hnas_cluster_admin_ip0\u0027,"},{"line_number":58,"context_line":"               default\u003dNone,"},{"line_number":59,"context_line":"               help\u003d\"The IP of the clusters admin node. Only set in HNAS \""}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_dad384d4","line":56,"in_reply_to":"1a4dcd0f_229db565","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":127,"context_line":"        host allowed, type of access granted."},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":132,"context_line":"                             access[\u0027access_type\u0027].lower()):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_a209c585","line":129,"updated":"2015-08-13 16:58:56.000000000","message":"This \"share_id\" is used only in \"if\" \"success\" block. So, it should be defined there.","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":127,"context_line":"        host allowed, type of access granted."},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":132,"context_line":"                             access[\u0027access_type\u0027].lower()):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_0f1bf581","line":129,"in_reply_to":"1a4dcd0f_a209c585","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        :param access: Information about the access that will be denied, e.g."},{"line_number":154,"context_line":"        host and type of access denied."},{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":159,"context_line":"                             access[\u0027access_type\u0027].lower()):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_027e79e3","line":156,"updated":"2015-08-13 16:58:56.000000000","message":"same here.","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        :param access: Information about the access that will be denied, e.g."},{"line_number":154,"context_line":"        host and type of access denied."},{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":159,"context_line":"                             access[\u0027access_type\u0027].lower()):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_6a114753","line":156,"in_reply_to":"1a4dcd0f_027e79e3","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38479ca8c8ae76838e02b4265ba34dcb5d78a749","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if hnas_evs_id is None:"},{"line_number":98,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_evs_id is not set.\")"},{"line_number":99,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if self.hnas_evs_ip is None:"},{"line_number":102,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_evs_ip is not set.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_04bac10a","line":99,"updated":"2015-08-14 17:36:02.000000000","message":"exception.InvalidParameterValue(err\u003dmsg)","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2adfb6c2b16b3bf61eb2b0aaed306cda8bd3f7bc","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        if hnas_evs_id is None:"},{"line_number":98,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_evs_id is not set.\")"},{"line_number":99,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if self.hnas_evs_ip is None:"},{"line_number":102,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_evs_ip is not set.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_1fdc4873","line":99,"in_reply_to":"1a4dcd0f_04bac10a","updated":"2015-08-14 18:28:16.000000000","message":"Done","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38479ca8c8ae76838e02b4265ba34dcb5d78a749","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if self.hnas_evs_ip is None:"},{"line_number":102,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_evs_ip is not set.\")"},{"line_number":103,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        if hnas_ip is None:"},{"line_number":106,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_ip is not set.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_643f0588","line":103,"updated":"2015-08-14 17:36:02.000000000","message":"same","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2adfb6c2b16b3bf61eb2b0aaed306cda8bd3f7bc","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if self.hnas_evs_ip is None:"},{"line_number":102,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_evs_ip is not set.\")"},{"line_number":103,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        if hnas_ip is None:"},{"line_number":106,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_ip is not set.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_dfe58038","line":103,"in_reply_to":"1a4dcd0f_643f0588","updated":"2015-08-14 18:28:16.000000000","message":"Done","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38479ca8c8ae76838e02b4265ba34dcb5d78a749","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        if hnas_ip is None:"},{"line_number":106,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_ip is not set.\")"},{"line_number":107,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_username is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_user is not set.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_244a5d28","line":107,"updated":"2015-08-14 17:36:02.000000000","message":"same","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2adfb6c2b16b3bf61eb2b0aaed306cda8bd3f7bc","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        if hnas_ip is None:"},{"line_number":106,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_ip is not set.\")"},{"line_number":107,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_username is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_user is not set.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_3fd90484","line":107,"in_reply_to":"1a4dcd0f_244a5d28","updated":"2015-08-14 18:28:16.000000000","message":"Done","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38479ca8c8ae76838e02b4265ba34dcb5d78a749","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_username is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_user is not set.\")"},{"line_number":111,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        if hnas_password is None and ssh_private_key is None:"},{"line_number":114,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_4447691d","line":111,"updated":"2015-08-14 17:36:02.000000000","message":"same","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2adfb6c2b16b3bf61eb2b0aaed306cda8bd3f7bc","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if hnas_username is None:"},{"line_number":110,"context_line":"            msg \u003d _(\"The config parameter hds_hnas_user is not set.\")"},{"line_number":111,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        if hnas_password is None and ssh_private_key is None:"},{"line_number":114,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_ffe2bc2e","line":111,"in_reply_to":"1a4dcd0f_4447691d","updated":"2015-08-14 18:28:16.000000000","message":"Done","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38479ca8c8ae76838e02b4265ba34dcb5d78a749","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""},{"line_number":115,"context_line":"                    \"you need to set hds_hnas_password or \""},{"line_number":116,"context_line":"                    \"hds_hnas_ssh_private_key.\")"},{"line_number":117,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        LOG.debug(\"Initializing HNAS Layer.\")"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_a45c2df1","line":117,"updated":"2015-08-14 17:36:02.000000000","message":"same","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2adfb6c2b16b3bf61eb2b0aaed306cda8bd3f7bc","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            msg \u003d _(\"Credentials configuration parameters missing: \""},{"line_number":115,"context_line":"                    \"you need to set hds_hnas_password or \""},{"line_number":116,"context_line":"                    \"hds_hnas_ssh_private_key.\")"},{"line_number":117,"context_line":"            raise exception.InvalidParameterValue(msg)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        LOG.debug(\"Initializing HNAS Layer.\")"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_9fce18b6","line":117,"in_reply_to":"1a4dcd0f_a45c2df1","updated":"2015-08-14 18:28:16.000000000","message":"Done","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38479ca8c8ae76838e02b4265ba34dcb5d78a749","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        :param context: It will be used to access db."},{"line_number":129,"context_line":"        :param share: Share that access will be allowed."},{"line_number":130,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":131,"context_line":"        host allowed, type of access granted."},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":134,"context_line":"                             access[\u0027access_type\u0027].lower()):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_6497053b","line":131,"updated":"2015-08-14 17:36:02.000000000","message":"Missing share_server.  It is missed in all docstrings below.","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2adfb6c2b16b3bf61eb2b0aaed306cda8bd3f7bc","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        :param context: It will be used to access db."},{"line_number":129,"context_line":"        :param share: Share that access will be allowed."},{"line_number":130,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":131,"context_line":"        host allowed, type of access granted."},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) \u003d\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":134,"context_line":"                             access[\u0027access_type\u0027].lower()):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_9fc5b80b","line":131,"in_reply_to":"1a4dcd0f_6497053b","updated":"2015-08-14 18:28:16.000000000","message":"Done","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38479ca8c8ae76838e02b4265ba34dcb5d78a749","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":190,"context_line":"            msg \u003d _(\"Only NFS protocol is currently supported.\")"},{"line_number":191,"context_line":"            raise exception.ManilaException(msg)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        ip \u003d self.hnas_evs_ip"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_e49d5567","line":191,"updated":"2015-08-14 17:36:02.000000000","message":"This is too general.  Please use ShareBackendException(msg\u003dmsg) instead.","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2adfb6c2b16b3bf61eb2b0aaed306cda8bd3f7bc","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":190,"context_line":"            msg \u003d _(\"Only NFS protocol is currently supported.\")"},{"line_number":191,"context_line":"            raise exception.ManilaException(msg)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        ip \u003d self.hnas_evs_ip"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_334f006c","line":191,"in_reply_to":"1a4dcd0f_e49d5567","updated":"2015-08-14 18:28:16.000000000","message":"Done","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38479ca8c8ae76838e02b4265ba34dcb5d78a749","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":305,"context_line":"            msg \u003d _(\"Only NFS protocol is currently supported.\")"},{"line_number":306,"context_line":"            raise exception.ManilaException(msg)"},{"line_number":307,"context_line":"        else:"},{"line_number":308,"context_line":"            self.hnas.extend_share(share_id,"},{"line_number":309,"context_line":"                                   new_size, share[\u0027share_proto\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_a402ed70","line":306,"updated":"2015-08-14 17:36:02.000000000","message":"ShareBackendException.  Same for other places as well.","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2adfb6c2b16b3bf61eb2b0aaed306cda8bd3f7bc","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":305,"context_line":"            msg \u003d _(\"Only NFS protocol is currently supported.\")"},{"line_number":306,"context_line":"            raise exception.ManilaException(msg)"},{"line_number":307,"context_line":"        else:"},{"line_number":308,"context_line":"            self.hnas.extend_share(share_id,"},{"line_number":309,"context_line":"                                   new_size, share[\u0027share_proto\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_5f6bb0f1","line":306,"in_reply_to":"1a4dcd0f_a402ed70","updated":"2015-08-14 18:28:16.000000000","message":"Done","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"38479ca8c8ae76838e02b4265ba34dcb5d78a749","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            \u0027storage_protocol\u0027: \u0027NFS\u0027,"},{"line_number":338,"context_line":"            \u0027total_capacity_gb\u0027: total_space,"},{"line_number":339,"context_line":"            \u0027free_capacity_gb\u0027: free_space,"},{"line_number":340,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":341,"context_line":"            \u0027QoS_support\u0027: False,"},{"line_number":342,"context_line":"        }"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_24257d09","line":340,"updated":"2015-08-14 17:36:02.000000000","message":"reserved_percentage should be honored.  Should read from manila.conf.","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"2adfb6c2b16b3bf61eb2b0aaed306cda8bd3f7bc","unresolved":false,"context_lines":[{"line_number":337,"context_line":"            \u0027storage_protocol\u0027: \u0027NFS\u0027,"},{"line_number":338,"context_line":"            \u0027total_capacity_gb\u0027: total_space,"},{"line_number":339,"context_line":"            \u0027free_capacity_gb\u0027: free_space,"},{"line_number":340,"context_line":"            \u0027reserved_percentage\u0027: 0,"},{"line_number":341,"context_line":"            \u0027QoS_support\u0027: False,"},{"line_number":342,"context_line":"        }"},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a4dcd0f_1fae88e7","line":340,"in_reply_to":"1a4dcd0f_24257d09","updated":"2015-08-14 18:28:16.000000000","message":"Done","commit_id":"333f4637e098c170104e471c775ecd05abaf5e51"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):"},{"line_number":128,"context_line":"        \"\"\"Allow access to a share."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        :param context: It will be used to access db."},{"line_number":131,"context_line":"        :param share: Share that access will be allowed."},{"line_number":132,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":133,"context_line":"        host allowed, type of access granted."}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_c0904bef","line":130,"updated":"2015-08-18 04:26:37.000000000","message":"This is misleading, as there mustn\u0027t be any db access in the driver.  Please find a better description and use it here and elsewhere below.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    def allow_access(self, context, share, access, share_server\u003dNone):"},{"line_number":128,"context_line":"        \"\"\"Allow access to a share."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        :param context: It will be used to access db."},{"line_number":131,"context_line":"        :param share: Share that access will be allowed."},{"line_number":132,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":133,"context_line":"        host allowed, type of access granted."}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_b079d395","line":130,"in_reply_to":"fa1b9901_c0904bef","updated":"2015-08-18 14:58:34.000000000","message":"Done","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\"Allow access to a share."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        :param context: It will be used to access db."},{"line_number":131,"context_line":"        :param share: Share that access will be allowed."},{"line_number":132,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":133,"context_line":"        host allowed, type of access granted."},{"line_number":134,"context_line":"        :param share_server: data structure used to provide extra information."}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_40499b8a","line":131,"updated":"2015-08-18 04:26:37.000000000","message":"Share to which access will be allowed.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\"Allow access to a share."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        :param context: It will be used to access db."},{"line_number":131,"context_line":"        :param share: Share that access will be allowed."},{"line_number":132,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":133,"context_line":"        host allowed, type of access granted."},{"line_number":134,"context_line":"        :param share_server: data structure used to provide extra information."}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_842575ac","line":131,"in_reply_to":"fa1b9901_40499b8a","updated":"2015-08-18 14:58:34.000000000","message":"Done","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"a85b98acdc6a070b04dc149796466a38e4049a3e","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.info(_LI(\"Access allowed successfully to share: %(shr)s.\"),"},{"line_number":149,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":150,"context_line":"        else:"},{"line_number":151,"context_line":"            msg \u003d _(\"Only NFS protocol and IP access type currently \""},{"line_number":152,"context_line":"                    \"supported.\")"},{"line_number":153,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_f7177752","line":150,"updated":"2015-08-17 14:11:11.000000000","message":"It\u0027s better to check errors at the beginning because it reduces code nesting.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"6b4b69390724e771402875dad2b73830acf70b1b","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.info(_LI(\"Access allowed successfully to share: %(shr)s.\"),"},{"line_number":149,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":150,"context_line":"        else:"},{"line_number":151,"context_line":"            msg \u003d _(\"Only NFS protocol and IP access type currently \""},{"line_number":152,"context_line":"                    \"supported.\")"},{"line_number":153,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_f00d3d38","line":150,"in_reply_to":"fa1b9901_55209bf7","updated":"2015-08-17 14:46:22.000000000","message":"It\u0027s just a suggestion. Reason for -1 is here: https://review.openstack.org/#/c/204692/19/manila/share/drivers/hitachi/ssh.py","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.info(_LI(\"Access allowed successfully to share: %(shr)s.\"),"},{"line_number":149,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":150,"context_line":"        else:"},{"line_number":151,"context_line":"            msg \u003d _(\"Only NFS protocol and IP access type currently \""},{"line_number":152,"context_line":"                    \"supported.\")"},{"line_number":153,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_0453a5e2","line":150,"in_reply_to":"fa1b9901_60637f1b","updated":"2015-08-18 14:58:34.000000000","message":"Done","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.info(_LI(\"Access allowed successfully to share: %(shr)s.\"),"},{"line_number":149,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":150,"context_line":"        else:"},{"line_number":151,"context_line":"            msg \u003d _(\"Only NFS protocol and IP access type currently \""},{"line_number":152,"context_line":"                    \"supported.\")"},{"line_number":153,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_60637f1b","line":150,"in_reply_to":"fa1b9901_f00d3d38","updated":"2015-08-18 04:26:37.000000000","message":"I agree with Igor.  It\u0027s better to check the error and raise an exception early, reducing nesting and enhancing readability.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"454b20e1eaeddb6e1ff203768a275e9960f664f6","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"            LOG.info(_LI(\"Access allowed successfully to share: %(shr)s.\"),"},{"line_number":149,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":150,"context_line":"        else:"},{"line_number":151,"context_line":"            msg \u003d _(\"Only NFS protocol and IP access type currently \""},{"line_number":152,"context_line":"                    \"supported.\")"},{"line_number":153,"context_line":"            raise exception.InvalidShareAccess(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_55209bf7","line":150,"in_reply_to":"fa1b9901_f7177752","updated":"2015-08-17 14:42:01.000000000","message":"I am not sure it is enough reason for -1.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \"\"\"Deny access to a share."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        :param context: It will be used to access db."},{"line_number":159,"context_line":"        :param share: Share that access will be denied."},{"line_number":160,"context_line":"        :param access: Information about the access that will be denied, e.g."},{"line_number":161,"context_line":"        host and type of access denied."},{"line_number":162,"context_line":"        :param share_server: data structure used to provide extra information."}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_e05eaf44","line":159,"updated":"2015-08-18 04:26:37.000000000","message":"Share to which access will be denied.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \"\"\"Deny access to a share."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        :param context: It will be used to access db."},{"line_number":159,"context_line":"        :param share: Share that access will be denied."},{"line_number":160,"context_line":"        :param access: Information about the access that will be denied, e.g."},{"line_number":161,"context_line":"        host and type of access denied."},{"line_number":162,"context_line":"        :param share_server: data structure used to provide extra information."}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_64570103","line":159,"in_reply_to":"fa1b9901_e05eaf44","updated":"2015-08-18 14:58:34.000000000","message":"Done","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"a85b98acdc6a070b04dc149796466a38e4049a3e","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            LOG.info(_LI(\"Access denied successfully to share: %(shr)s.\"),"},{"line_number":177,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":178,"context_line":"        else:"},{"line_number":179,"context_line":"            LOG.warning(_LW(\"Only NFS protocol and IP \""},{"line_number":180,"context_line":"                            \"access type currently supported.\"))"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_b711ff5f","line":178,"updated":"2015-08-17 14:11:11.000000000","message":"ditto","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            LOG.info(_LI(\"Access denied successfully to share: %(shr)s.\"),"},{"line_number":177,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":178,"context_line":"        else:"},{"line_number":179,"context_line":"            LOG.warning(_LW(\"Only NFS protocol and IP \""},{"line_number":180,"context_line":"                            \"access type currently supported.\"))"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_645861fb","line":178,"in_reply_to":"fa1b9901_a058b757","updated":"2015-08-18 14:58:34.000000000","message":"Done","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"            LOG.info(_LI(\"Access denied successfully to share: %(shr)s.\"),"},{"line_number":177,"context_line":"                     {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":178,"context_line":"        else:"},{"line_number":179,"context_line":"            LOG.warning(_LW(\"Only NFS protocol and IP \""},{"line_number":180,"context_line":"                            \"access type currently supported.\"))"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_a058b757","line":178,"in_reply_to":"fa1b9901_b711ff5f","updated":"2015-08-18 04:26:37.000000000","message":"+1","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        LOG.debug(\"The snapshot %(ss_sid)s will be deleted. The related \""},{"line_number":248,"context_line":"                  \"share ID is %(ss_id)s.\","},{"line_number":249,"context_line":"                  {\u0027ss_sid\u0027: snapshot[\u0027share_id\u0027],"},{"line_number":250,"context_line":"                   \u0027ss_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        self.hnas.delete_snapshot(share_id, snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_3373a3b3","line":249,"updated":"2015-08-18 04:26:37.000000000","message":"No need to wrap this dict.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        LOG.debug(\"The snapshot %(ss_sid)s will be deleted. The related \""},{"line_number":248,"context_line":"                  \"share ID is %(ss_id)s.\","},{"line_number":249,"context_line":"                  {\u0027ss_sid\u0027: snapshot[\u0027share_id\u0027],"},{"line_number":250,"context_line":"                   \u0027ss_id\u0027: snapshot[\u0027id\u0027]})"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"        self.hnas.delete_snapshot(share_id, snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_1f42123f","line":249,"in_reply_to":"fa1b9901_3373a3b3","updated":"2015-08-18 14:58:34.000000000","message":"Done","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":316,"context_line":"            msg \u003d _(\"Only NFS protocol is currently supported.\")"},{"line_number":317,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":318,"context_line":"        else:"},{"line_number":319,"context_line":"            self.hnas.extend_share(share_id,"},{"line_number":320,"context_line":"                                   new_size, share[\u0027share_proto\u0027])"},{"line_number":321,"context_line":"            LOG.info(_LI(\"Share %(shr_id)s successfully extended to \""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_b3b6d33b","line":318,"updated":"2015-08-18 04:26:37.000000000","message":"No need for this else statement.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        if share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027:"},{"line_number":316,"context_line":"            msg \u003d _(\"Only NFS protocol is currently supported.\")"},{"line_number":317,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":318,"context_line":"        else:"},{"line_number":319,"context_line":"            self.hnas.extend_share(share_id,"},{"line_number":320,"context_line":"                                   new_size, share[\u0027share_proto\u0027])"},{"line_number":321,"context_line":"            LOG.info(_LI(\"Share %(shr_id)s successfully extended to \""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_c4d84d56","line":318,"in_reply_to":"fa1b9901_b3b6d33b","updated":"2015-08-18 14:58:34.000000000","message":"Done","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        :param share: Share that will be managed."},{"line_number":366,"context_line":"        :param driver_options: Empty dict or dict with \u0027volume_id\u0027 option."},{"line_number":367,"context_line":"        :return: Returns a dict with size of share managed"},{"line_number":368,"context_line":"        and its location (your path in file-system)."},{"line_number":369,"context_line":"        \"\"\""},{"line_number":370,"context_line":"        if self.driver_handles_share_servers:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_33f883e5","line":367,"updated":"2015-08-18 04:26:37.000000000","message":":returns:\n\nhttp://docs.openstack.org/developer/hacking/\n\nSame elsewhere.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        :param share: Share that will be managed."},{"line_number":366,"context_line":"        :param driver_options: Empty dict or dict with \u0027volume_id\u0027 option."},{"line_number":367,"context_line":"        :return: Returns a dict with size of share managed"},{"line_number":368,"context_line":"        and its location (your path in file-system)."},{"line_number":369,"context_line":"        \"\"\""},{"line_number":370,"context_line":"        if self.driver_handles_share_servers:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_04740533","line":367,"in_reply_to":"fa1b9901_33f883e5","updated":"2015-08-18 14:58:34.000000000","message":"Done. Refactored ssh.py too.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                    \"such as create file-systems and network interfaces.\"),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027hds_hnas_password\u0027,"},{"line_number":43,"context_line":"               default\u003dNone,"},{"line_number":44,"context_line":"               help\u003d\"HNAS user password. Required only if private key is not \""},{"line_number":45,"context_line":"                    \"provided.\"),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027hds_hnas_evs_id\u0027,"},{"line_number":47,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_3d5ebe76","line":44,"updated":"2015-08-19 15:18:15.000000000","message":"Better to wrap passwords hiding their values. Need to add attr \"secret\u003dTrue\".\n\nSee: https://github.com/openstack/oslo.config/blob/ac505d83/oslo_config/cfg.py#L264","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                    \"such as create file-systems and network interfaces.\"),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027hds_hnas_password\u0027,"},{"line_number":43,"context_line":"               default\u003dNone,"},{"line_number":44,"context_line":"               help\u003d\"HNAS user password. Required only if private key is not \""},{"line_number":45,"context_line":"                    \"provided.\"),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027hds_hnas_evs_id\u0027,"},{"line_number":47,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_de28d5e4","line":44,"in_reply_to":"fa1b9901_3d5ebe76","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               help\u003d\"Specify file-system name for creating shares.\"),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ssh_private_key\u0027,"},{"line_number":56,"context_line":"               default\u003dNone,"},{"line_number":57,"context_line":"               help\u003d\"RSA/DSA private key used to connect into HNAS. Required \""},{"line_number":58,"context_line":"                    \"only if password is not provided.\"),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027hds_hnas_cluster_admin_ip0\u0027,"},{"line_number":60,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_5deff286","line":57,"updated":"2015-08-19 15:18:15.000000000","message":"It is unclear, is it a \"path\" to key or \"value\" of a key? Please, specify it explicitly.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":54,"context_line":"               help\u003d\"Specify file-system name for creating shares.\"),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027hds_hnas_ssh_private_key\u0027,"},{"line_number":56,"context_line":"               default\u003dNone,"},{"line_number":57,"context_line":"               help\u003d\"RSA/DSA private key used to connect into HNAS. Required \""},{"line_number":58,"context_line":"                    \"only if password is not provided.\"),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027hds_hnas_cluster_admin_ip0\u0027,"},{"line_number":60,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_fe8839c7","line":57,"in_reply_to":"fa1b9901_5deff286","updated":"2015-08-20 14:46:57.000000000","message":"Done. The option needed here is value, its now included in help.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":69,"context_line":"class HDSHNASDriver(driver.ShareDriver):"},{"line_number":70,"context_line":"    \"\"\"Manila HNAS Driver implementation."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        1.0 - Initial Version"},{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_9dab4a1d","line":72,"updated":"2015-08-19 15:18:15.000000000","message":"Line overindented:\n\nhttp://docs.openstack.org/developer/hacking/#docstrings","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":69,"context_line":"class HDSHNASDriver(driver.ShareDriver):"},{"line_number":70,"context_line":"    \"\"\"Manila HNAS Driver implementation."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        1.0 - Initial Version"},{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_1e588d89","line":72,"in_reply_to":"fa1b9901_9dab4a1d","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        \"\"\""},{"line_number":331,"context_line":"        return 0"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    @utils.synchronized(\"hds_hnas_update_share_stats\", external\u003dTrue)"},{"line_number":334,"context_line":"    def _update_share_stats(self):"},{"line_number":335,"context_line":"        \"\"\"Updates the Capability of Backend.\"\"\""},{"line_number":336,"context_line":"        LOG.debug(\"Updating Backend Capability Information.\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_d873107f","line":333,"updated":"2015-08-19 15:18:15.000000000","message":"Why do you need this sync?","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        \"\"\""},{"line_number":331,"context_line":"        return 0"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    @utils.synchronized(\"hds_hnas_update_share_stats\", external\u003dTrue)"},{"line_number":334,"context_line":"    def _update_share_stats(self):"},{"line_number":335,"context_line":"        \"\"\"Updates the Capability of Backend.\"\"\""},{"line_number":336,"context_line":"        LOG.debug(\"Updating Backend Capability Information.\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_a9b1f748","line":333,"in_reply_to":"fa1b9901_d873107f","updated":"2015-08-20 14:46:57.000000000","message":"Done. After few discussions, it was removed.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        if len(old_path) \u003d\u003d 3:"},{"line_number":394,"context_line":"            evs_ip \u003d old_path_info[0]"},{"line_number":395,"context_line":"            share_id \u003d old_path_info[1].split(\u0027/\u0027)[2]"},{"line_number":396,"context_line":"        else:"},{"line_number":397,"context_line":"            msg \u003d _(\"Incorrect path. It should have the following format: \""},{"line_number":398,"context_line":"                    \"IP:/shares/share_id.\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_ca157340","line":395,"updated":"2015-08-19 15:18:15.000000000","message":"Here you perform duplication of line 391. Should be:\n\n\"\"\"\n\nshare_id \u003d old_path[2]\n\n\"\"\"","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        if len(old_path) \u003d\u003d 3:"},{"line_number":394,"context_line":"            evs_ip \u003d old_path_info[0]"},{"line_number":395,"context_line":"            share_id \u003d old_path_info[1].split(\u0027/\u0027)[2]"},{"line_number":396,"context_line":"        else:"},{"line_number":397,"context_line":"            msg \u003d _(\"Incorrect path. It should have the following format: \""},{"line_number":398,"context_line":"                    \"IP:/shares/share_id.\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_7e1f496c","line":395,"in_reply_to":"fa1b9901_ca157340","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        :param share: Share to which access will be allowed."},{"line_number":132,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":133,"context_line":"        host allowed, type of access granted."},{"line_number":134,"context_line":"        :param share_server: Data structure used to provide extra information."},{"line_number":135,"context_line":"        \"\"\""},{"line_number":136,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) !\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":137,"context_line":"                             access[\u0027access_type\u0027].lower()):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_a77469cf","line":134,"updated":"2015-08-26 22:24:51.000000000","message":"This comment is too generic.  Perhaps something like:\n\n\"Share server information.  Not used by this driver.\"\n\n(same everywhere)","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        :param share: Share to which access will be allowed."},{"line_number":132,"context_line":"        :param access: Information about the access that will be allowed, e.g."},{"line_number":133,"context_line":"        host allowed, type of access granted."},{"line_number":134,"context_line":"        :param share_server: Data structure used to provide extra information."},{"line_number":135,"context_line":"        \"\"\""},{"line_number":136,"context_line":"        if (\u0027nfs\u0027, \u0027ip\u0027) !\u003d (share[\u0027share_proto\u0027].lower(),"},{"line_number":137,"context_line":"                             access[\u0027access_type\u0027].lower()):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_890cb795","line":134,"in_reply_to":"da20952f_a77469cf","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                               access[\u0027access_level\u0027])"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        LOG.info(_LI(\"Access allowed successfully to share: %(shr)s.\"),"},{"line_number":152,"context_line":"                 {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):"},{"line_number":155,"context_line":"        \"\"\"Deny access to a share."}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_27093996","line":152,"updated":"2015-08-26 22:24:51.000000000","message":"It seems strange to me to send the whole __dict__ to a log message.  You haven\u0027t done that in most of the driver.  Why do it only in the allow / deny access  methods?","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                               access[\u0027access_level\u0027])"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        LOG.info(_LI(\"Access allowed successfully to share: %(shr)s.\"),"},{"line_number":152,"context_line":"                 {\u0027shr\u0027: six.text_type(share.__dict__)})"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def deny_access(self, context, share, access, share_server\u003dNone):"},{"line_number":155,"context_line":"        \"\"\"Deny access to a share."}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_49b1bf8e","line":152,"in_reply_to":"da20952f_27093996","updated":"2015-08-27 14:21:15.000000000","message":"Yes, I have changed to print only id now.","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        LOG.debug(\"Deleting share in HNAS: %(shr)s.\","},{"line_number":216,"context_line":"                  {\u0027shr\u0027: six.text_type(share)})"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        self.hnas.delete_share(share_id, share[\u0027share_proto\u0027])"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_e75ee175","line":216,"updated":"2015-08-26 22:24:51.000000000","message":"Are you sure you want to send the whole share object to the log?  Why not just share[\u0027id\u0027] as in the previous method?","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        LOG.debug(\"Deleting share in HNAS: %(shr)s.\","},{"line_number":216,"context_line":"                  {\u0027shr\u0027: six.text_type(share)})"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        self.hnas.delete_share(share_id, share[\u0027share_proto\u0027])"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_c94aaf83","line":216,"in_reply_to":"da20952f_e75ee175","updated":"2015-08-27 14:21:15.000000000","message":"Changed to print only id in LOG.","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \"\"\"Creates a new share from snapshot."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":259,"context_line":"        :param share: Informations about the new share."},{"line_number":260,"context_line":"        :param snapshot: Informations about the snapshot that"},{"line_number":261,"context_line":"        will be copied to new share."},{"line_number":262,"context_line":"        :param share_server: data structure used to provide extra information."}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_8702853d","line":259,"updated":"2015-08-26 22:24:51.000000000","message":"s/Informations/Information/\n\n(same on next line)","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        \"\"\"Creates a new share from snapshot."},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":259,"context_line":"        :param share: Informations about the new share."},{"line_number":260,"context_line":"        :param snapshot: Informations about the snapshot that"},{"line_number":261,"context_line":"        will be copied to new share."},{"line_number":262,"context_line":"        :param share_server: data structure used to provide extra information."}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_0907471d","line":259,"in_reply_to":"da20952f_8702853d","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":280,"context_line":"        :param share: Share that will be checked."},{"line_number":281,"context_line":"        :param share_server: data structure used to provide extra information."},{"line_number":282,"context_line":"        :returns: Returns a list of EVS IP concatenate with the path"},{"line_number":283,"context_line":"        of share in the filesystem (e.g. [\u0027172.24.44.10:/shares/id\u0027])."},{"line_number":284,"context_line":"        \"\"\""},{"line_number":285,"context_line":"        LOG.debug(\"Ensuring share in HNAS: %(shr)s.\","}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_c7115d5f","line":282,"updated":"2015-08-26 22:24:51.000000000","message":"s/concatenate/concatenated/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        :param context: The `context.RequestContext` object for the request"},{"line_number":280,"context_line":"        :param share: Share that will be checked."},{"line_number":281,"context_line":"        :param share_server: data structure used to provide extra information."},{"line_number":282,"context_line":"        :returns: Returns a list of EVS IP concatenate with the path"},{"line_number":283,"context_line":"        of share in the filesystem (e.g. [\u0027172.24.44.10:/shares/id\u0027])."},{"line_number":284,"context_line":"        \"\"\""},{"line_number":285,"context_line":"        LOG.debug(\"Ensuring share in HNAS: %(shr)s.\","}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_8c20459d","line":282,"in_reply_to":"da20952f_c7115d5f","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            msg \u003d _(\"Only NFS protocol is currently supported.\")"},{"line_number":315,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        self.hnas.extend_share(share_id,"},{"line_number":318,"context_line":"                               new_size, share[\u0027share_proto\u0027])"},{"line_number":319,"context_line":"        LOG.info(_LI(\"Share %(shr_id)s successfully extended to \""},{"line_number":320,"context_line":"                     \"%(shr_size)s.\"),"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_47046c14","line":317,"updated":"2015-08-26 22:24:51.000000000","message":"No need to wrap here.","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            msg \u003d _(\"Only NFS protocol is currently supported.\")"},{"line_number":315,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        self.hnas.extend_share(share_id,"},{"line_number":318,"context_line":"                               new_size, share[\u0027share_proto\u0027])"},{"line_number":319,"context_line":"        LOG.info(_LI(\"Share %(shr_id)s successfully extended to \""},{"line_number":320,"context_line":"                     \"%(shr_size)s.\"),"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_6c3851d4","line":317,"in_reply_to":"da20952f_47046c14","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"69d191268d64736d5b828575258e73d14282b3cc","unresolved":false,"context_lines":[{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        LOG.debug(\"Share ensured in HNAS: %(shr)s.\","},{"line_number":306,"context_line":"                  {\u0027shr\u0027: six.text_type(share[\u0027id\u0027])})"},{"line_number":307,"context_line":"        return export_list"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def extend_share(self, share, new_size, share_server\u003dNone):"},{"line_number":310,"context_line":"        \"\"\"Extends a share to new size."}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_20f9f580","line":307,"updated":"2015-08-27 15:00:50.000000000","message":"I\u0027m curious why you return an export list here, while the two share creation methods return a single export.  Either choice works perfectly fine, although the preferred form is to return an export list from each of these methods.","commit_id":"5fb872fed18c9b0ae1bc5741017e90591a847709"}],"manila/share/drivers/hitachi/ssh.py":[{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def get_stats(self):"},{"line_number":46,"context_line":"        \"\"\"Get the stats from file-system."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        The available space is calculated by Total Space - SUM(quotas)."},{"line_number":49,"context_line":"        :return:"},{"line_number":50,"context_line":"        total_fs_space \u003d Total size from filesystem in config file."},{"line_number":51,"context_line":"        available_space \u003d Free space currently on filesystem."}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_2631ba59","line":48,"updated":"2015-08-02 19:43:17.000000000","message":"s/Total/total","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def get_stats(self):"},{"line_number":46,"context_line":"        \"\"\"Get the stats from file-system."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        The available space is calculated by Total Space - SUM(quotas)."},{"line_number":49,"context_line":"        :return:"},{"line_number":50,"context_line":"        total_fs_space \u003d Total size from filesystem in config file."},{"line_number":51,"context_line":"        available_space \u003d Free space currently on filesystem."}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_4f52c468","line":48,"in_reply_to":"3a50d1a3_2631ba59","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                total_quota +\u003d share_quota"},{"line_number":61,"context_line":"        available_space \u003d total_fs_space - total_quota"},{"line_number":62,"context_line":"        LOG.debug(\"Available space in the file system: %(space)s\","},{"line_number":63,"context_line":"                  {\u0027space\u0027: six.text_type(available_space)})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        return total_fs_space, available_space"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_86652e46","line":63,"updated":"2015-08-02 19:43:17.000000000","message":"End with \".\" throughout.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                total_quota +\u003d share_quota"},{"line_number":61,"context_line":"        available_space \u003d total_fs_space - total_quota"},{"line_number":62,"context_line":"        LOG.debug(\"Available space in the file system: %(space)s\","},{"line_number":63,"context_line":"                  {\u0027space\u0027: six.text_type(available_space)})"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        return total_fs_space, available_space"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_2fdc18e3","line":63,"in_reply_to":"3a50d1a3_86652e46","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"8ec37a4ce0d9b141834d145363d5b73e8008f247","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            if host_access in host_list:"},{"line_number":88,"context_line":"                LOG.debug(\"Host: %(host)s is already allowed\","},{"line_number":89,"context_line":"                          {\u0027host\u0027: host})"},{"line_number":90,"context_line":"            elif host_access not in host_list:"},{"line_number":91,"context_line":"                # remove all the hosts with different permissions"},{"line_number":92,"context_line":"                host_list \u003d [x for x"},{"line_number":93,"context_line":"                             in host_list if not x.startswith(host)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_0c0e273d","line":90,"updated":"2015-08-02 09:07:00.000000000","message":"elif--\u003eelse","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            if host_access in host_list:"},{"line_number":88,"context_line":"                LOG.debug(\"Host: %(host)s is already allowed\","},{"line_number":89,"context_line":"                          {\u0027host\u0027: host})"},{"line_number":90,"context_line":"            elif host_access not in host_list:"},{"line_number":91,"context_line":"                # remove all the hosts with different permissions"},{"line_number":92,"context_line":"                host_list \u003d [x for x"},{"line_number":93,"context_line":"                             in host_list if not x.startswith(host)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_fdb99aed","line":90,"in_reply_to":"3a50d1a3_0c0e273d","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"8ec37a4ce0d9b141834d145363d5b73e8008f247","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                self._update_access_rule(share_id, host_list)"},{"line_number":97,"context_line":"        else:"},{"line_number":98,"context_line":"            host_list.append(host_access)"},{"line_number":99,"context_line":"            self._update_access_rule(share_id, host_list)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def deny_access(self, share_id, host, share_proto, permission):"},{"line_number":102,"context_line":"        \"\"\"Deny access to the share."}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_cc0cbf44","line":99,"updated":"2015-08-02 09:07:00.000000000","message":"host_list.append(host_access)\nself._update_access_rule(share_id, host_list)\n\nrepeated code. Can optimize it?","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                self._update_access_rule(share_id, host_list)"},{"line_number":97,"context_line":"        else:"},{"line_number":98,"context_line":"            host_list.append(host_access)"},{"line_number":99,"context_line":"            self._update_access_rule(share_id, host_list)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def deny_access(self, share_id, host, share_proto, permission):"},{"line_number":102,"context_line":"        \"\"\"Deny access to the share."}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_6ef9524d","line":99,"in_reply_to":"3a50d1a3_cc0cbf44","updated":"2015-08-03 18:19:18.000000000","message":"The append in host list is made in different conditions.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"fb3197ff759f2ab7ea39177cead2f3909eea2c66","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            raise exception.HNASBackendException(msg)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        path \u003d six.text_type(self.evs_ip) + \u0027:/shares/\u0027 + share_id"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        return {\u0027size\u0027: share_size, \u0027export_locations\u0027: path}"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def create_snapshot(self, share_id, snapshot_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_29318a59","line":227,"updated":"2015-08-03 02:46:21.000000000","message":"\u0027export_locations\u0027 is expected to be a list at final. So, would be great to provide it as list.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            raise exception.HNASBackendException(msg)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        path \u003d six.text_type(self.evs_ip) + \u0027:/shares/\u0027 + share_id"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        return {\u0027size\u0027: share_size, \u0027export_locations\u0027: path}"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def create_snapshot(self, share_id, snapshot_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_7ab0308c","line":227,"in_reply_to":"3a50d1a3_29318a59","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            try:"},{"line_number":360,"context_line":"                out, err \u003d processutils.ssh_execute(ssh, commands,"},{"line_number":361,"context_line":"                                                    check_exit_code\u003dTrue)"},{"line_number":362,"context_line":"                LOG.debug(\"command %(cmd)s result: out \u003d %(out)s - err \u003d \""},{"line_number":363,"context_line":"                          \"%(err)s\", {\u0027cmd\u0027: commands, \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":364,"context_line":"                return out, err"},{"line_number":365,"context_line":"            except processutils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_26b21a97","line":362,"updated":"2015-08-02 19:43:17.000000000","message":"Capitalize \"command\"","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            try:"},{"line_number":360,"context_line":"                out, err \u003d processutils.ssh_execute(ssh, commands,"},{"line_number":361,"context_line":"                                                    check_exit_code\u003dTrue)"},{"line_number":362,"context_line":"                LOG.debug(\"command %(cmd)s result: out \u003d %(out)s - err \u003d \""},{"line_number":363,"context_line":"                          \"%(err)s\", {\u0027cmd\u0027: commands, \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":364,"context_line":"                return out, err"},{"line_number":365,"context_line":"            except processutils.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_6fb22098","line":362,"in_reply_to":"3a50d1a3_26b21a97","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                elif \"NoEVS\" not in items[i]:"},{"line_number":390,"context_line":"                    # Not considering FS without EVS"},{"line_number":391,"context_line":"                    filesystem_list.append(FileSystem(items[i]))"},{"line_number":392,"context_line":"                    if fs_name is not None:"},{"line_number":393,"context_line":"                        filesystem_list[j].name \u003d fs_name"},{"line_number":394,"context_line":"                        fs_name \u003d None"},{"line_number":395,"context_line":"                    j +\u003d 1"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_e602f23d","line":392,"updated":"2015-08-02 19:43:17.000000000","message":"Should this be outside elif?\n\nfs_name set in 388 not used here.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":389,"context_line":"                elif \"NoEVS\" not in items[i]:"},{"line_number":390,"context_line":"                    # Not considering FS without EVS"},{"line_number":391,"context_line":"                    filesystem_list.append(FileSystem(items[i]))"},{"line_number":392,"context_line":"                    if fs_name is not None:"},{"line_number":393,"context_line":"                        filesystem_list[j].name \u003d fs_name"},{"line_number":394,"context_line":"                        fs_name \u003d None"},{"line_number":395,"context_line":"                    j +\u003d 1"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_ca948238","line":392,"in_reply_to":"3a50d1a3_e602f23d","updated":"2015-08-03 18:19:18.000000000","message":"Actually, when there is a filesystem name with more than 32 characters, HNAS break it in 2 lines. This if and elif threats this case, so, in first iteration it get the fs name in fs_name variable and in next iteration, it replaces the name in filesystem_list.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14377,"name":"Apoorva","email":"apps.desh@gmail.com","username":"apoorvad"},"change_message_id":"69213e3d1ee838f1d96f9ebf05459280ba6a4181","unresolved":false,"context_lines":[{"line_number":508,"context_line":"        items \u003d out.split(\u0027\\n\u0027)"},{"line_number":509,"context_line":"        filesystem_name_list \u003d []"},{"line_number":510,"context_line":"        if len(items) \u003e 2:"},{"line_number":511,"context_line":"            for i in range(2, len(items) - 1):"},{"line_number":512,"context_line":"                if \"Filesystem\" in items[i]:"},{"line_number":513,"context_line":"                    description, fs_name \u003d items[i].split()"},{"line_number":514,"context_line":"                    filesystem_name_list.append(fs_name[:len(fs_name) - 1])"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_46a08642","line":511,"updated":"2015-08-02 19:43:17.000000000","message":"line 386-392 perform similar processing. You potentially can optimize it.","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3c8425c38c4ac14db5ccf38789cab11a39ed744a","unresolved":false,"context_lines":[{"line_number":508,"context_line":"        items \u003d out.split(\u0027\\n\u0027)"},{"line_number":509,"context_line":"        filesystem_name_list \u003d []"},{"line_number":510,"context_line":"        if len(items) \u003e 2:"},{"line_number":511,"context_line":"            for i in range(2, len(items) - 1):"},{"line_number":512,"context_line":"                if \"Filesystem\" in items[i]:"},{"line_number":513,"context_line":"                    description, fs_name \u003d items[i].split()"},{"line_number":514,"context_line":"                    filesystem_name_list.append(fs_name[:len(fs_name) - 1])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_5aa7744f","line":511,"in_reply_to":"3a50d1a3_46a08642","updated":"2015-08-03 18:19:18.000000000","message":"Done","commit_id":"a512f795c2ca40096a4b76a8bfecf21a2633ac7b"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"086ecdbf0bc53f4d7fdce6b3c123e66e8b8d67d2","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            # Copy the directory to new vvol"},{"line_number":318,"context_line":"            # Syntax: tree-clone-job-submit \u003csource-directory\u003e \u003cnew-share\u003e"},{"line_number":319,"context_line":"            LOG.debug(\"Started share create from: %(shr)s\","},{"line_number":320,"context_line":"                      {\u0027shr\u0027: six.text_type(snapshot[\u0027share_id\u0027])})"},{"line_number":321,"context_line":"            command \u003d [\u0027tree-clone-job-submit\u0027, src_path, dst_path]"},{"line_number":322,"context_line":"            output, err \u003d self._execute(command)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_11776e3b","line":319,"updated":"2015-08-04 10:12:47.000000000","message":"Add \u0027.\u0027 in the end","commit_id":"18178fbd6bf42f62f48d4c52daa51590f3246ff3"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"bc776f48ba5bd013a2b31dc1f0cb027bb76538de","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            # Copy the directory to new vvol"},{"line_number":318,"context_line":"            # Syntax: tree-clone-job-submit \u003csource-directory\u003e \u003cnew-share\u003e"},{"line_number":319,"context_line":"            LOG.debug(\"Started share create from: %(shr)s\","},{"line_number":320,"context_line":"                      {\u0027shr\u0027: six.text_type(snapshot[\u0027share_id\u0027])})"},{"line_number":321,"context_line":"            command \u003d [\u0027tree-clone-job-submit\u0027, src_path, dst_path]"},{"line_number":322,"context_line":"            output, err \u003d self._execute(command)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_3a96fa4c","line":319,"in_reply_to":"1a4dcd0f_11776e3b","updated":"2015-08-05 14:24:52.000000000","message":"Done","commit_id":"18178fbd6bf42f62f48d4c52daa51590f3246ff3"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"234c1af24412a845b157b4e9c3d47aa1117db3a0","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                self.evs \u003d int(items[4])"},{"line_number":611,"context_line":"                self.capacity \u003d int(items[5])"},{"line_number":612,"context_line":"                self.confined \u003d int(items[6])"},{"line_number":613,"context_line":"                if len(items) \u003d\u003d 8:"},{"line_number":614,"context_line":"                    self.flag \u003d items[7]"},{"line_number":615,"context_line":"                else:"},{"line_number":616,"context_line":"                    self.flag \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_4e66a8ee","line":613,"updated":"2015-08-04 13:12:39.000000000","message":"In line 605, if len(items) \u003d\u003d 7:\nDon\u0027t go to the branch in line 613. The \u0027len(items)\u0027 is not equal to 8.","commit_id":"18178fbd6bf42f62f48d4c52daa51590f3246ff3"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"bc776f48ba5bd013a2b31dc1f0cb027bb76538de","unresolved":false,"context_lines":[{"line_number":610,"context_line":"                self.evs \u003d int(items[4])"},{"line_number":611,"context_line":"                self.capacity \u003d int(items[5])"},{"line_number":612,"context_line":"                self.confined \u003d int(items[6])"},{"line_number":613,"context_line":"                if len(items) \u003d\u003d 8:"},{"line_number":614,"context_line":"                    self.flag \u003d items[7]"},{"line_number":615,"context_line":"                else:"},{"line_number":616,"context_line":"                    self.flag \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_55cb871e","line":613,"in_reply_to":"1a4dcd0f_4e66a8ee","updated":"2015-08-05 14:24:52.000000000","message":"Thanks in pointing that Zhongjun! In some especial cases file systems can have a additional \u0027flag\u0027 as option. I\u0027m changing the verification to len(items) \u003e\u003d 7, and in the end, if fs has a flag, I store it in flag variable, else, set it as empty.","commit_id":"18178fbd6bf42f62f48d4c52daa51590f3246ff3"},{"author":{"_account_id":17444,"name":"Jay.Shen","email":"shenhong09@huawei.com","username":"Jay.Shen"},"change_message_id":"b7b0c069d914e1fcbd4fe931a4b8e3acdb6ed38b","unresolved":false,"context_lines":[{"line_number":375,"context_line":"                out, err \u003d processutils.ssh_execute(ssh, commands,"},{"line_number":376,"context_line":"                                                    check_exit_code\u003dTrue)"},{"line_number":377,"context_line":"                LOG.debug(\"Command %(cmd)s result: out \u003d %(out)s - err \u003d \""},{"line_number":378,"context_line":"                          \"%(err)s\", {\u0027cmd\u0027: commands, \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":379,"context_line":"                return out, err"},{"line_number":380,"context_line":"            except processutils.ProcessExecutionError:"},{"line_number":381,"context_line":"                LOG.error(_LE(\"Error running SSH command.\"))"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_f9a1fc46","line":378,"updated":"2015-08-06 14:32:20.000000000","message":"Add \u0027.\u0027 in the end","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"d6bda10628ae7e3b885dfe3a10bc8a91c0289eca","unresolved":false,"context_lines":[{"line_number":375,"context_line":"                out, err \u003d processutils.ssh_execute(ssh, commands,"},{"line_number":376,"context_line":"                                                    check_exit_code\u003dTrue)"},{"line_number":377,"context_line":"                LOG.debug(\"Command %(cmd)s result: out \u003d %(out)s - err \u003d \""},{"line_number":378,"context_line":"                          \"%(err)s\", {\u0027cmd\u0027: commands, \u0027out\u0027: out, \u0027err\u0027: err})"},{"line_number":379,"context_line":"                return out, err"},{"line_number":380,"context_line":"            except processutils.ProcessExecutionError:"},{"line_number":381,"context_line":"                LOG.error(_LE(\"Error running SSH command.\"))"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_f2710e0d","line":378,"in_reply_to":"1a4dcd0f_f9a1fc46","updated":"2015-08-06 17:49:13.000000000","message":"Done","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"db8e3ad6f2ea2838821c067819e3608ed81e919d","unresolved":false,"context_lines":[{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def _check_export(self, vvol_name):"},{"line_number":548,"context_line":"        export \u003d self._nfs_export_list(vvol_name)"},{"line_number":549,"context_line":"        if vvol_name in export[0].export_name and \\"},{"line_number":550,"context_line":"           self.fs_name in export[0].file_system_label:"},{"line_number":551,"context_line":"            return True"},{"line_number":552,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_6d53eee2","line":549,"updated":"2015-08-06 13:13:51.000000000","message":"use () instead of \\","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"d6bda10628ae7e3b885dfe3a10bc8a91c0289eca","unresolved":false,"context_lines":[{"line_number":546,"context_line":""},{"line_number":547,"context_line":"    def _check_export(self, vvol_name):"},{"line_number":548,"context_line":"        export \u003d self._nfs_export_list(vvol_name)"},{"line_number":549,"context_line":"        if vvol_name in export[0].export_name and \\"},{"line_number":550,"context_line":"           self.fs_name in export[0].file_system_label:"},{"line_number":551,"context_line":"            return True"},{"line_number":552,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_c3945344","line":549,"in_reply_to":"1a4dcd0f_6d53eee2","updated":"2015-08-06 17:49:13.000000000","message":"Done","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"db8e3ad6f2ea2838821c067819e3608ed81e919d","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                    \u0027No quotas matching\u0027 not in items[i]):"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"                if \u0027Limit\u0027 in items[i] and \u0027Hard\u0027 in items[i]:"},{"line_number":567,"context_line":"                    quota \u003d float(items[i].split(\u0027 \u0027)[12])"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                    # If the quota is 1 or more TB, converts to GB"},{"line_number":570,"context_line":"                    if items[i].split(\u0027 \u0027)[13] \u003d\u003d \u0027TB\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_cdf802c6","line":567,"updated":"2015-08-06 13:13:51.000000000","message":"what\u0027s 12 means? suggest using CONSTANT.","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a2a8c3873d9817a25861621492f4d4b6a2c182fa","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                    \u0027No quotas matching\u0027 not in items[i]):"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"                if \u0027Limit\u0027 in items[i] and \u0027Hard\u0027 in items[i]:"},{"line_number":567,"context_line":"                    quota \u003d float(items[i].split(\u0027 \u0027)[12])"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                    # If the quota is 1 or more TB, converts to GB"},{"line_number":570,"context_line":"                    if items[i].split(\u0027 \u0027)[13] \u003d\u003d \u0027TB\u0027:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_00b791f5","line":567,"in_reply_to":"1a4dcd0f_cdf802c6","updated":"2015-08-06 13:29:18.000000000","message":"I think this is OK. This is a parser, the code will go insane if we create a var for each field. See for example the Class in the end of the file.","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"db8e3ad6f2ea2838821c067819e3608ed81e919d","unresolved":false,"context_lines":[{"line_number":567,"context_line":"                    quota \u003d float(items[i].split(\u0027 \u0027)[12])"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                    # If the quota is 1 or more TB, converts to GB"},{"line_number":570,"context_line":"                    if items[i].split(\u0027 \u0027)[13] \u003d\u003d \u0027TB\u0027:"},{"line_number":571,"context_line":"                        return quota * 1000"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"                    return quota"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_6d18ce1e","line":570,"updated":"2015-08-06 13:13:51.000000000","message":"Suggest using CONSTANT instead of 13.","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"d6bda10628ae7e3b885dfe3a10bc8a91c0289eca","unresolved":false,"context_lines":[{"line_number":567,"context_line":"                    quota \u003d float(items[i].split(\u0027 \u0027)[12])"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                    # If the quota is 1 or more TB, converts to GB"},{"line_number":570,"context_line":"                    if items[i].split(\u0027 \u0027)[13] \u003d\u003d \u0027TB\u0027:"},{"line_number":571,"context_line":"                        return quota * 1000"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"                    return quota"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_831babc9","line":570,"in_reply_to":"1a4dcd0f_6d18ce1e","updated":"2015-08-06 17:49:13.000000000","message":"I agree with Erlon\u0027s commentary.","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"a2a8c3873d9817a25861621492f4d4b6a2c182fa","unresolved":false,"context_lines":[{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                    # If the quota is 1 or more TB, converts to GB"},{"line_number":570,"context_line":"                    if items[i].split(\u0027 \u0027)[13] \u003d\u003d \u0027TB\u0027:"},{"line_number":571,"context_line":"                        return quota * 1000"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"                    return quota"},{"line_number":574,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_806721b6","line":571,"updated":"2015-08-06 13:29:18.000000000","message":"units.Ki","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"db8e3ad6f2ea2838821c067819e3608ed81e919d","unresolved":false,"context_lines":[{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                    # If the quota is 1 or more TB, converts to GB"},{"line_number":570,"context_line":"                    if items[i].split(\u0027 \u0027)[13] \u003d\u003d \u0027TB\u0027:"},{"line_number":571,"context_line":"                        return quota * 1000"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"                    return quota"},{"line_number":574,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_6def6ee9","line":571,"updated":"2015-08-06 13:13:51.000000000","message":"using CONSTANT instead of 1000.","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"d6bda10628ae7e3b885dfe3a10bc8a91c0289eca","unresolved":false,"context_lines":[{"line_number":568,"context_line":""},{"line_number":569,"context_line":"                    # If the quota is 1 or more TB, converts to GB"},{"line_number":570,"context_line":"                    if items[i].split(\u0027 \u0027)[13] \u003d\u003d \u0027TB\u0027:"},{"line_number":571,"context_line":"                        return quota * 1000"},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"                    return quota"},{"line_number":574,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_3996843f","line":571,"in_reply_to":"1a4dcd0f_806721b6","updated":"2015-08-06 17:49:13.000000000","message":"Done","commit_id":"bda5867927258ace88781792ddad24bf29d25b29"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"7360731a1d6ff7bcb454c2509b85ef96f28fdf0b","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":"from manila import exception"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_concurrency import processutils"},{"line_number":19,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_4d003702","line":16,"updated":"2015-08-07 14:29:12.000000000","message":"This line should be moved to code line 23.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","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":"from manila import exception"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_concurrency import processutils"},{"line_number":19,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_f1bf95cd","line":16,"in_reply_to":"1a4dcd0f_4d003702","updated":"2015-08-07 16:49:28.000000000","message":"+1","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class HNASSSHBackend():"},{"line_number":33,"context_line":"    def __init__(self, hnas_ip, hnas_username, hnas_password, ssh_private_key,"},{"line_number":34,"context_line":"                 cluster_admin_ip0, evs_id, evs_ip, fs_name):"},{"line_number":35,"context_line":"        self.ip \u003d hnas_ip"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_ccd2005c","line":32,"updated":"2015-08-07 16:49:28.000000000","message":"New class-styles should be used. - Inherited from \"object\".","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class HNASSSHBackend():"},{"line_number":33,"context_line":"    def __init__(self, hnas_ip, hnas_username, hnas_password, ssh_private_key,"},{"line_number":34,"context_line":"                 cluster_admin_ip0, evs_id, evs_ip, fs_name):"},{"line_number":35,"context_line":"        self.ip \u003d hnas_ip"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_22eec88b","line":32,"in_reply_to":"1a4dcd0f_ccd2005c","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                total_quota +\u003d share_quota"},{"line_number":62,"context_line":"        available_space \u003d total_fs_space - total_quota"},{"line_number":63,"context_line":"        LOG.debug(\"Available space in the file system: %(space)s.\","},{"line_number":64,"context_line":"                  {\u0027space\u0027: six.text_type(available_space)})"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return total_fs_space, available_space"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_5198c977","line":64,"updated":"2015-08-07 16:49:28.000000000","message":"Why do you need to translate it to string? You can substitute an integer too.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                total_quota +\u003d share_quota"},{"line_number":62,"context_line":"        available_space \u003d total_fs_space - total_quota"},{"line_number":63,"context_line":"        LOG.debug(\"Available space in the file system: %(space)s.\","},{"line_number":64,"context_line":"                  {\u0027space\u0027: six.text_type(available_space)})"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return total_fs_space, available_space"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_ad02c93c","line":64,"in_reply_to":"1a4dcd0f_5198c977","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # check if the host(s) is already not allowed"},{"line_number":121,"context_line":"        if host_access not in host_list:"},{"line_number":122,"context_line":"            LOG.debug(\"Host is already not allowed.\")"},{"line_number":123,"context_line":"        else:"},{"line_number":124,"context_line":"            # remove the host on host_list"},{"line_number":125,"context_line":"            host_list.remove(host_access)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_91973139","line":122,"updated":"2015-08-07 16:49:28.000000000","message":"which host?","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        # check if the host(s) is already not allowed"},{"line_number":121,"context_line":"        if host_access not in host_list:"},{"line_number":122,"context_line":"            LOG.debug(\"Host is already not allowed.\")"},{"line_number":123,"context_line":"        else:"},{"line_number":124,"context_line":"            # remove the host on host_list"},{"line_number":125,"context_line":"            host_list.remove(host_access)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_10dd0d42","line":122,"in_reply_to":"1a4dcd0f_91973139","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            return path"},{"line_number":184,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":185,"context_line":"            self._vvol_delete(share_id)"},{"line_number":186,"context_line":"            raise e"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def extend_share(self, share_id, share_size, share_proto):"},{"line_number":189,"context_line":"        \"\"\"Extends a share to new size."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_31be5dae","line":186,"updated":"2015-08-07 16:49:28.000000000","message":"Maybe you may want to execute \"raise e\" in \"finally\" block? Because, I guess, it is very likely to fail deletion after failed creation of a share.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            return path"},{"line_number":184,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":185,"context_line":"            self._vvol_delete(share_id)"},{"line_number":186,"context_line":"            raise e"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def extend_share(self, share_id, share_size, share_proto):"},{"line_number":189,"context_line":"        \"\"\"Extends a share to new size."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_eba0afa7","line":186,"in_reply_to":"1a4dcd0f_31be5dae","updated":"2015-08-10 19:26:38.000000000","message":"When code hits the try-block means that it already executed vvol_create function, and created a virtual-volume and quota. The try-block tries to export it, if it fails, virtual-volume and quota created before are deleted and exception about exporting the share is thrown. If it can\u0027t create the virtual-volume or quota, an exception is thrown on _execute not in here.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        if share_size \u003c available_space:"},{"line_number":204,"context_line":"            self._extend_quota(share_id, share_size)"},{"line_number":205,"context_line":"            return"},{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            msg \u003d _(\"Failed to extend share.\")"},{"line_number":208,"context_line":"            raise exception.HNASBackendException(msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_b1e82db4","line":205,"updated":"2015-08-07 16:49:28.000000000","message":"\"return\" is redundant here.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        if share_size \u003c available_space:"},{"line_number":204,"context_line":"            self._extend_quota(share_id, share_size)"},{"line_number":205,"context_line":"            return"},{"line_number":206,"context_line":"        else:"},{"line_number":207,"context_line":"            msg \u003d _(\"Failed to extend share.\")"},{"line_number":208,"context_line":"            raise exception.HNASBackendException(msg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_10b42df0","line":205,"in_reply_to":"1a4dcd0f_b1e82db4","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        :return: Returns a dict with size of share managed"},{"line_number":217,"context_line":"        and its location (your path in file-system)"},{"line_number":218,"context_line":"        \"\"\""},{"line_number":219,"context_line":"        path \u003d []"},{"line_number":220,"context_line":"        self.ensure_share(share_id, share_proto)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        share_size \u003d self._get_share_quota(share_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_b1ffcd64","line":219,"updated":"2015-08-07 16:49:28.000000000","message":"\"path\" is singular. Please, use some plural.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        :return: Returns a dict with size of share managed"},{"line_number":217,"context_line":"        and its location (your path in file-system)"},{"line_number":218,"context_line":"        \"\"\""},{"line_number":219,"context_line":"        path \u003d []"},{"line_number":220,"context_line":"        self.ensure_share(share_id, share_proto)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        share_size \u003d self._get_share_quota(share_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_f0c5013d","line":219,"in_reply_to":"1a4dcd0f_b1ffcd64","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if \u0027Request submitted successfully\u0027 in output:"},{"line_number":280,"context_line":"            self._locked_selectfs(\u0027delete\u0027, path)"},{"line_number":281,"context_line":"            return"},{"line_number":282,"context_line":"        else:"},{"line_number":283,"context_line":"            LOG.error(_LE(\u0027Error in snapshot deletion.\u0027))"},{"line_number":284,"context_line":"            msg \u003d _(\"Share snapshot was not deleted.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_910ad177","line":281,"updated":"2015-08-07 16:49:28.000000000","message":"return is redundant","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        if \u0027Request submitted successfully\u0027 in output:"},{"line_number":280,"context_line":"            self._locked_selectfs(\u0027delete\u0027, path)"},{"line_number":281,"context_line":"            return"},{"line_number":282,"context_line":"        else:"},{"line_number":283,"context_line":"            LOG.error(_LE(\u0027Error in snapshot deletion.\u0027))"},{"line_number":284,"context_line":"            msg \u003d _(\"Share snapshot was not deleted.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_f0cc2163","line":281,"in_reply_to":"1a4dcd0f_910ad177","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            return"},{"line_number":282,"context_line":"        else:"},{"line_number":283,"context_line":"            LOG.error(_LE(\u0027Error in snapshot deletion.\u0027))"},{"line_number":284,"context_line":"            msg \u003d _(\"Share snapshot was not deleted.\")"},{"line_number":285,"context_line":"            raise exception.HNASBackendException(msg)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def create_share_from_snapshot(self, share, snapshot):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_5129a9e4","line":284,"updated":"2015-08-07 16:49:28.000000000","message":"Which snapshot?","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            return"},{"line_number":282,"context_line":"        else:"},{"line_number":283,"context_line":"            LOG.error(_LE(\u0027Error in snapshot deletion.\u0027))"},{"line_number":284,"context_line":"            msg \u003d _(\"Share snapshot was not deleted.\")"},{"line_number":285,"context_line":"            raise exception.HNASBackendException(msg)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def create_share_from_snapshot(self, share, snapshot):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_10d18dcd","line":284,"in_reply_to":"1a4dcd0f_5129a9e4","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":386,"context_line":"            j \u003d 0"},{"line_number":387,"context_line":"            for i in range(2, len(items) - 1):"},{"line_number":388,"context_line":"                if \"Filesystem \" in items[i]:"},{"line_number":389,"context_line":"                    description, fs_name \u003d items[i].split()"},{"line_number":390,"context_line":"                    fs_name \u003d fs_name[:len(fs_name) - 1]"},{"line_number":391,"context_line":"                elif \"NoEVS\" not in items[i]:"},{"line_number":392,"context_line":"                    # Not considering FS without EVS"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_b1e90d81","line":389,"updated":"2015-08-07 16:49:28.000000000","message":"Possible ValueError when split returns not two elements.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":386,"context_line":"            j \u003d 0"},{"line_number":387,"context_line":"            for i in range(2, len(items) - 1):"},{"line_number":388,"context_line":"                if \"Filesystem \" in items[i]:"},{"line_number":389,"context_line":"                    description, fs_name \u003d items[i].split()"},{"line_number":390,"context_line":"                    fs_name \u003d fs_name[:len(fs_name) - 1]"},{"line_number":391,"context_line":"                elif \"NoEVS\" not in items[i]:"},{"line_number":392,"context_line":"                    # Not considering FS without EVS"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_d077a5d2","line":389,"in_reply_to":"1a4dcd0f_b1e90d81","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    def _check_export(self, vvol_name):"},{"line_number":535,"context_line":"        export \u003d self._nfs_export_list(vvol_name)"},{"line_number":536,"context_line":"        if (vvol_name in export[0].export_name and"},{"line_number":537,"context_line":"           self.fs_name in export[0].file_system_label):"},{"line_number":538,"context_line":"            return True"},{"line_number":539,"context_line":"        else:"},{"line_number":540,"context_line":"            msg \u003d \"Export does not exists.\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_71ae252f","line":537,"updated":"2015-08-07 16:49:28.000000000","message":"Such continuations should have indentation +8 symbols.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    def _check_export(self, vvol_name):"},{"line_number":535,"context_line":"        export \u003d self._nfs_export_list(vvol_name)"},{"line_number":536,"context_line":"        if (vvol_name in export[0].export_name and"},{"line_number":537,"context_line":"           self.fs_name in export[0].file_system_label):"},{"line_number":538,"context_line":"            return True"},{"line_number":539,"context_line":"        else:"},{"line_number":540,"context_line":"            msg \u003d \"Export does not exists.\""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_d00c8544","line":537,"in_reply_to":"1a4dcd0f_71ae252f","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        for i in range(0, len(items) - 1):"},{"line_number":550,"context_line":"            if (\u0027Unset\u0027 not in items[i] or"},{"line_number":551,"context_line":"                    \u0027No quotas matching\u0027 not in items[i]):"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"                if \u0027Limit\u0027 in items[i] and \u0027Hard\u0027 in items[i]:"},{"line_number":554,"context_line":"                    quota \u003d float(items[i].split(\u0027 \u0027)[12])"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_517a09be","line":551,"updated":"2015-08-07 16:49:28.000000000","message":"Can be simplified:\n\n\"\"\"\n\nif {\u0027Unset\u0027, \u0027No quotas matching\u0027}.intersection(set(items[i])):\n\n\"\"\"","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        for i in range(0, len(items) - 1):"},{"line_number":550,"context_line":"            if (\u0027Unset\u0027 not in items[i] or"},{"line_number":551,"context_line":"                    \u0027No quotas matching\u0027 not in items[i]):"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"                if \u0027Limit\u0027 in items[i] and \u0027Hard\u0027 in items[i]:"},{"line_number":554,"context_line":"                    quota \u003d float(items[i].split(\u0027 \u0027)[12])"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_ab462c4d","line":551,"in_reply_to":"1a4dcd0f_517a09be","updated":"2015-08-10 19:26:38.000000000","message":"Ok, thanks. Just added if NOT {\u0027Unset\u0027, \u0027No quotas...","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":613,"context_line":"                return"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"class FileSystem():"},{"line_number":617,"context_line":"    def __init__(self, data):"},{"line_number":618,"context_line":"        if data:"},{"line_number":619,"context_line":"            items \u003d data.split()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_acf454f0","line":616,"updated":"2015-08-07 16:49:28.000000000","message":"New class-styles should be used. - Inherited from \"object\".","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":613,"context_line":"                return"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"class FileSystem():"},{"line_number":617,"context_line":"    def __init__(self, data):"},{"line_number":618,"context_line":"        if data:"},{"line_number":619,"context_line":"            items \u003d data.split()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_cb6858bd","line":616,"in_reply_to":"1a4dcd0f_acf454f0","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                    self.flag \u003d \u0027\u0027"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"class Export():"},{"line_number":635,"context_line":"    def __init__(self, data):"},{"line_number":636,"context_line":"        if data:"},{"line_number":637,"context_line":"            split_data \u003d data.split(\u0027Export configuration:\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_4ce03029","line":634,"updated":"2015-08-07 16:49:28.000000000","message":"New class-styles should be used. - Inherited from \"object\".","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":631,"context_line":"                    self.flag \u003d \u0027\u0027"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"class Export():"},{"line_number":635,"context_line":"    def __init__(self, data):"},{"line_number":636,"context_line":"        if data:"},{"line_number":637,"context_line":"            split_data \u003d data.split(\u0027Export configuration:\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_8b6250d7","line":634,"in_reply_to":"1a4dcd0f_4ce03029","updated":"2015-08-10 19:26:38.000000000","message":"Done","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            else:"},{"line_number":91,"context_line":"                # remove all the hosts with different permissions"},{"line_number":92,"context_line":"                host_list \u003d [x for x"},{"line_number":93,"context_line":"                             in host_list if not x.startswith(host)]"},{"line_number":94,"context_line":"                # add the host with new permission"},{"line_number":95,"context_line":"                host_list.append(host_access)"},{"line_number":96,"context_line":"                self._update_access_rule(share_id, host_list)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_db64f822","line":93,"updated":"2015-08-13 16:58:56.000000000","message":"It would look better if make as following:\n\n\"\"\"\n\nhost_list \u003d [\n\n    x for x in host_list if not x.startswith(host)]\n\n\"\"\"","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            else:"},{"line_number":91,"context_line":"                # remove all the hosts with different permissions"},{"line_number":92,"context_line":"                host_list \u003d [x for x"},{"line_number":93,"context_line":"                             in host_list if not x.startswith(host)]"},{"line_number":94,"context_line":"                # add the host with new permission"},{"line_number":95,"context_line":"                host_list.append(host_access)"},{"line_number":96,"context_line":"                self._update_access_rule(share_id, host_list)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_4a46cb50","line":93,"in_reply_to":"1a4dcd0f_db64f822","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # get the list that contains all the hosts allowed on the share"},{"line_number":115,"context_line":"        host_list \u003d export[0].export_configuration"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        host_access \u003d host + \u0027(\u0027 + permission + \u0027)\u0027"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        # check if the host(s) is already not allowed"},{"line_number":120,"context_line":"        if host_access not in host_list:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_db4b9885","line":117,"updated":"2015-08-13 16:58:56.000000000","message":"no verification for value of \"permission\"?","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        # get the list that contains all the hosts allowed on the share"},{"line_number":115,"context_line":"        host_list \u003d export[0].export_configuration"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        host_access \u003d host + \u0027(\u0027 + permission + \u0027)\u0027"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        # check if the host(s) is already not allowed"},{"line_number":120,"context_line":"        if host_access not in host_list:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_5a50d4d4","line":117,"in_reply_to":"1a4dcd0f_db4b9885","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        try:"},{"line_number":138,"context_line":"            self.ensure_share(share_id, share_proto)"},{"line_number":139,"context_line":"        except exception.HNASBackendException as e:"},{"line_number":140,"context_line":"            LOG.warning(_LW(\"Share was not ensured.\"))"},{"line_number":141,"context_line":"            LOG.exception(six.text_type(e))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        self._nfs_export_del(share_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_7b092430","line":140,"updated":"2015-08-13 16:58:56.000000000","message":"\"ensured\"? It is \"delete_share\" method. Also, what ID of this share?","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        try:"},{"line_number":138,"context_line":"            self.ensure_share(share_id, share_proto)"},{"line_number":139,"context_line":"        except exception.HNASBackendException as e:"},{"line_number":140,"context_line":"            LOG.warning(_LW(\"Share was not ensured.\"))"},{"line_number":141,"context_line":"            LOG.exception(six.text_type(e))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        self._nfs_export_del(share_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_ba231858","line":140,"in_reply_to":"1a4dcd0f_7b092430","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":646,"context_line":"            split_data \u003d data.split(\u0027Export configuration:\\n\u0027)"},{"line_number":647,"context_line":"            items \u003d split_data[0].split(\u0027\\n\u0027)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"            self.export_name \u003d items[0].split(\u0027: \u0027)[1]"},{"line_number":650,"context_line":"            self.export_path \u003d items[1].split(\u0027: \u0027)[1]"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"            if \u0027*** not available ***\u0027 in items[2]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_0402fc09","line":649,"updated":"2015-08-13 16:58:56.000000000","message":"Would be safer to split just by \":\" and call \"strip()\".\n\nSame for all below things.","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":646,"context_line":"            split_data \u003d data.split(\u0027Export configuration:\\n\u0027)"},{"line_number":647,"context_line":"            items \u003d split_data[0].split(\u0027\\n\u0027)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"            self.export_name \u003d items[0].split(\u0027: \u0027)[1]"},{"line_number":650,"context_line":"            self.export_path \u003d items[1].split(\u0027: \u0027)[1]"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"            if \u0027*** not available ***\u0027 in items[2]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_7af6f091","line":649,"in_reply_to":"1a4dcd0f_0402fc09","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"26bb0f579cbe876f677e6c1ae260f657725c1625","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":553,"context_line":"            msg \u003d six.text_type(e)"},{"line_number":554,"context_line":"            LOG.exception(msg)"},{"line_number":555,"context_line":"            msg \u003d \"Virtual volume does not exists.\""},{"line_number":556,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def _check_quota(self, vvol_name):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_cb27f361","line":555,"updated":"2015-08-15 13:54:52.000000000","message":"Please add \"_()\"\n\nmsg\u003d _(\"Virtual volume does not exists.\")","commit_id":"1b03b025bca5a7bc04999167634bdf48091d2c85"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"6413fdad941fe790542edb8cc630a97f96c43e20","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":553,"context_line":"            msg \u003d six.text_type(e)"},{"line_number":554,"context_line":"            LOG.exception(msg)"},{"line_number":555,"context_line":"            msg \u003d \"Virtual volume does not exists.\""},{"line_number":556,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def _check_quota(self, vvol_name):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_090a15d3","line":555,"in_reply_to":"1a4dcd0f_cb27f361","updated":"2015-08-17 13:34:14.000000000","message":"Done","commit_id":"1b03b025bca5a7bc04999167634bdf48091d2c85"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"26bb0f579cbe876f677e6c1ae260f657725c1625","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        if \u0027No quotas matching specified filter criteria\u0027 not in output:"},{"line_number":563,"context_line":"            return True"},{"line_number":564,"context_line":"        else:"},{"line_number":565,"context_line":"            msg \u003d \"Virtual volume does not have any quota.\""},{"line_number":566,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def _check_export(self, vvol_name):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_8b1a4b17","line":565,"updated":"2015-08-15 13:54:52.000000000","message":"Please add \"_()\"","commit_id":"1b03b025bca5a7bc04999167634bdf48091d2c85"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"6413fdad941fe790542edb8cc630a97f96c43e20","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        if \u0027No quotas matching specified filter criteria\u0027 not in output:"},{"line_number":563,"context_line":"            return True"},{"line_number":564,"context_line":"        else:"},{"line_number":565,"context_line":"            msg \u003d \"Virtual volume does not have any quota.\""},{"line_number":566,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def _check_export(self, vvol_name):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_a90e89e3","line":565,"in_reply_to":"1a4dcd0f_8b1a4b17","updated":"2015-08-17 13:34:14.000000000","message":"Done","commit_id":"1b03b025bca5a7bc04999167634bdf48091d2c85"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"26bb0f579cbe876f677e6c1ae260f657725c1625","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                self.fs_name in export[0].file_system_label):"},{"line_number":572,"context_line":"            return True"},{"line_number":573,"context_line":"        else:"},{"line_number":574,"context_line":"            msg \u003d \"Export does not exists.\""},{"line_number":575,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    def _get_share_quota(self, share_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_2b19b722","line":574,"updated":"2015-08-15 13:54:52.000000000","message":"Please add \"_()\"","commit_id":"1b03b025bca5a7bc04999167634bdf48091d2c85"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"6413fdad941fe790542edb8cc630a97f96c43e20","unresolved":false,"context_lines":[{"line_number":571,"context_line":"                self.fs_name in export[0].file_system_label):"},{"line_number":572,"context_line":"            return True"},{"line_number":573,"context_line":"        else:"},{"line_number":574,"context_line":"            msg \u003d \"Export does not exists.\""},{"line_number":575,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"    def _get_share_quota(self, share_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa1b9901_c913bd0c","line":574,"in_reply_to":"1a4dcd0f_2b19b722","updated":"2015-08-17 13:34:14.000000000","message":"Done","commit_id":"1b03b025bca5a7bc04999167634bdf48091d2c85"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        except exception.HNASBackendException as e:"},{"line_number":150,"context_line":"            LOG.warning(_LW(\"Share %s does not exists on backend anymore.\"),"},{"line_number":151,"context_line":"                        share_id)"},{"line_number":152,"context_line":"            LOG.exception(six.text_type(e))"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        self._nfs_export_del(share_id)"},{"line_number":155,"context_line":"        self._vvol_delete(share_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_53889722","line":152,"updated":"2015-08-18 04:26:37.000000000","message":"Shouldn\u0027t you return here, since the share doesn\u0027t exist any more?","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        except exception.HNASBackendException as e:"},{"line_number":150,"context_line":"            LOG.warning(_LW(\"Share %s does not exists on backend anymore.\"),"},{"line_number":151,"context_line":"                        share_id)"},{"line_number":152,"context_line":"            LOG.exception(six.text_type(e))"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        self._nfs_export_del(share_id)"},{"line_number":155,"context_line":"        self._vvol_delete(share_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_c5084430","line":152,"in_reply_to":"fa1b9901_53889722","updated":"2015-08-18 14:58:34.000000000","message":"No. The function continues because maybe share was deleted but export was not, or vice-versa, the next steps checks and delete it on \u0027HNAS\u0027. Delete_share don\u0027t raise an exception in this case, so the driver can delete the share on Manila successfully.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"a85b98acdc6a070b04dc149796466a38e4049a3e","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        command \u003d command + [\u0027console-context\u0027, \u0027--evs\u0027, self.evs_id]"},{"line_number":358,"context_line":"        commands \u003d command + commands"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        mutils.check_ssh_injection(commands)"},{"line_number":361,"context_line":"        commands \u003d \u0027 \u0027.join(commands)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        if not self.sshpool:"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_ba400609","line":360,"updated":"2015-08-17 14:11:11.000000000","message":"Why do you use a \"handmade\" function instead of standard functions for shell quote (pipes.quote/shlex.quote)?","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                     \"quota limit, please set it before manage.\") % share_id)"},{"line_number":243,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        paths.append(six.text_type(self.evs_ip) + \u0027:/shares/\u0027 + share_id)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        return {\u0027size\u0027: share_size, \u0027export_locations\u0027: paths}"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_0adb6b50","line":245,"updated":"2015-08-19 15:18:15.000000000","message":"line 236 could be removed.\n\nThis could be :\n\n\"\"\"\n\npath \u003d six.text_type(self.evs_ip) + \u0027:/shares/\u0027 + share_id\n\n\"\"\"\n\nand then:\n\n\"\"\"\n\nreturn {\u0027size\u0027: share_size, \u0027export_locations\u0027: [path]}\n\n\"\"\"","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                     \"quota limit, please set it before manage.\") % share_id)"},{"line_number":243,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        paths.append(six.text_type(self.evs_ip) + \u0027:/shares/\u0027 + share_id)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        return {\u0027size\u0027: share_size, \u0027export_locations\u0027: paths}"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_b3bf5aa9","line":245,"in_reply_to":"fa1b9901_0adb6b50","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                # Return export path"},{"line_number":347,"context_line":"                return dst_path"},{"line_number":348,"context_line":"        else:"},{"line_number":349,"context_line":"            msg \u003d _(\"Share was not created.\")"},{"line_number":350,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    def _execute(self, commands):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_0a97eb3a","line":349,"updated":"2015-08-19 15:18:15.000000000","message":"No share identification.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                # Return export path"},{"line_number":347,"context_line":"                return dst_path"},{"line_number":348,"context_line":"        else:"},{"line_number":349,"context_line":"            msg \u003d _(\"Share was not created.\")"},{"line_number":350,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    def _execute(self, commands):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_730b028f","line":349,"in_reply_to":"fa1b9901_0a97eb3a","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                    if fs_name is not None:"},{"line_number":412,"context_line":"                        filesystem_list[j].name \u003d fs_name"},{"line_number":413,"context_line":"                        fs_name \u003d None"},{"line_number":414,"context_line":"                    j +\u003d 1"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        return filesystem_list"},{"line_number":417,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_ca7ed318","line":414,"updated":"2015-08-19 15:18:15.000000000","message":"It is better to do something in \"else\" block. At least \"log\" some useful info.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                    if fs_name is not None:"},{"line_number":412,"context_line":"                        filesystem_list[j].name \u003d fs_name"},{"line_number":413,"context_line":"                        fs_name \u003d None"},{"line_number":414,"context_line":"                    j +\u003d 1"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        return filesystem_list"},{"line_number":417,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_bee2c12d","line":414,"in_reply_to":"fa1b9901_ca7ed318","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        try:"},{"line_number":148,"context_line":"            self.ensure_share(share_id, share_proto)"},{"line_number":149,"context_line":"        except exception.HNASBackendException as e:"},{"line_number":150,"context_line":"            LOG.warning(_LW(\"Share %s does not exists on backend anymore.\"),"},{"line_number":151,"context_line":"                        share_id)"},{"line_number":152,"context_line":"            LOG.exception(six.text_type(e))"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_0607361d","line":150,"updated":"2015-08-27 14:21:15.000000000","message":"s/exists/exist/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        if not self._check_fs_mounted(self.fs_name):"},{"line_number":171,"context_line":"            self._mount(self.fs_name)"},{"line_number":172,"context_line":"            LOG.debug(\"Filesystem %(fs)s is umounted. Mounting...\","},{"line_number":173,"context_line":"                      {\u0027fs\u0027: self.fs_name})"},{"line_number":174,"context_line":"        self._check_vvol(share_id)"},{"line_number":175,"context_line":"        self._check_quota(share_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_e734a04b","line":172,"updated":"2015-08-26 22:24:51.000000000","message":"s/umounted/unmounted/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        if not self._check_fs_mounted(self.fs_name):"},{"line_number":171,"context_line":"            self._mount(self.fs_name)"},{"line_number":172,"context_line":"            LOG.debug(\"Filesystem %(fs)s is umounted. Mounting...\","},{"line_number":173,"context_line":"                      {\u0027fs\u0027: self.fs_name})"},{"line_number":174,"context_line":"        self._check_vvol(share_id)"},{"line_number":175,"context_line":"        self._check_quota(share_id)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_46f9ae7f","line":172,"in_reply_to":"da20952f_e734a04b","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def create_share(self, share_id, share_size, share_proto):"},{"line_number":180,"context_line":"        \"\"\"Creates share."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        Creates a virtual-volume, add a quota limit and exports it."},{"line_number":183,"context_line":"        :param share_id: ID of share that will be created."},{"line_number":184,"context_line":"        :param share_size: Size limit of share."},{"line_number":185,"context_line":"        :param share_proto: Storage protocol of share. Currently,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_271298b5","line":182,"updated":"2015-08-26 22:24:51.000000000","message":"s/add/adds/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":179,"context_line":"    def create_share(self, share_id, share_size, share_proto):"},{"line_number":180,"context_line":"        \"\"\"Creates share."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        Creates a virtual-volume, add a quota limit and exports it."},{"line_number":183,"context_line":"        :param share_id: ID of share that will be created."},{"line_number":184,"context_line":"        :param share_size: Size limit of share."},{"line_number":185,"context_line":"        :param share_proto: Storage protocol of share. Currently,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_e6300259","line":182,"in_reply_to":"da20952f_271298b5","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        dst_path \u003d \u0027/shares/\u0027 + share[\u0027id\u0027]"},{"line_number":312,"context_line":"        src_path \u003d \u0027/snapshots/\u0027 + snapshot[\u0027share_id\u0027] + \u0027/\u0027 + snapshot[\u0027id\u0027]"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        # before copy everything to new vvol, we need to create it"},{"line_number":315,"context_line":"        # because, we only can transform an empty directory into a vvol"},{"line_number":316,"context_line":"        quota \u003d self._get_share_quota(snapshot[\u0027share_id\u0027])"},{"line_number":317,"context_line":"        LOG.debug(\"Share size: %(quota)s.\", {\u0027quota\u0027: six.text_type(quota)})"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_4736ac04","line":314,"updated":"2015-08-26 22:24:51.000000000","message":"s/before copy/Before copying/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        dst_path \u003d \u0027/shares/\u0027 + share[\u0027id\u0027]"},{"line_number":312,"context_line":"        src_path \u003d \u0027/snapshots/\u0027 + snapshot[\u0027share_id\u0027] + \u0027/\u0027 + snapshot[\u0027id\u0027]"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        # before copy everything to new vvol, we need to create it"},{"line_number":315,"context_line":"        # because, we only can transform an empty directory into a vvol"},{"line_number":316,"context_line":"        quota \u003d self._get_share_quota(snapshot[\u0027share_id\u0027])"},{"line_number":317,"context_line":"        LOG.debug(\"Share size: %(quota)s.\", {\u0027quota\u0027: six.text_type(quota)})"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_a65f6a71","line":314,"in_reply_to":"da20952f_4736ac04","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        try:"},{"line_number":433,"context_line":"            output, err \u003d self._execute(command)"},{"line_number":434,"context_line":"        except exception.HNASBackendException as e:"},{"line_number":435,"context_line":"            LOG.warning(_LW(\"Export %s does not exists on backend anymore.\"),"},{"line_number":436,"context_line":"                        path)"},{"line_number":437,"context_line":"            LOG.exception(six.text_type(e))"},{"line_number":438,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_ea56a505","line":435,"updated":"2015-08-26 22:24:51.000000000","message":"s/exists/exist/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        try:"},{"line_number":433,"context_line":"            output, err \u003d self._execute(command)"},{"line_number":434,"context_line":"        except exception.HNASBackendException as e:"},{"line_number":435,"context_line":"            LOG.warning(_LW(\"Export %s does not exists on backend anymore.\"),"},{"line_number":436,"context_line":"                        path)"},{"line_number":437,"context_line":"            LOG.exception(six.text_type(e))"},{"line_number":438,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_c6ee1e8b","line":435,"in_reply_to":"da20952f_ea56a505","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            return True"},{"line_number":529,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":530,"context_line":"            if \u0027Source path: Cannot access\u0027 in e.stderr:"},{"line_number":531,"context_line":"                LOG.debug(\"Share %(shr)s does not exists.\","},{"line_number":532,"context_line":"                          {\u0027shr\u0027: six.text_type(vvol_name)})"},{"line_number":533,"context_line":"            else:"},{"line_number":534,"context_line":"                msg \u003d six.text_type(e)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_6ab9352e","line":531,"updated":"2015-08-26 22:24:51.000000000","message":"s/exists/exist/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            return True"},{"line_number":529,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":530,"context_line":"            if \u0027Source path: Cannot access\u0027 in e.stderr:"},{"line_number":531,"context_line":"                LOG.debug(\"Share %(shr)s does not exists.\","},{"line_number":532,"context_line":"                          {\u0027shr\u0027: six.text_type(vvol_name)})"},{"line_number":533,"context_line":"            else:"},{"line_number":534,"context_line":"                msg \u003d six.text_type(e)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_4603ee42","line":531,"in_reply_to":"da20952f_6ab9352e","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":561,"context_line":"            msg \u003d six.text_type(e)"},{"line_number":562,"context_line":"            LOG.exception(msg)"},{"line_number":563,"context_line":"            msg \u003d (_(\"Virtual volume %s does not exists.\") % vvol_name)"},{"line_number":564,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def _check_quota(self, vvol_name):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_aa966d92","line":563,"updated":"2015-08-26 22:24:51.000000000","message":"s/exists/exist/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        except processutils.ProcessExecutionError as e:"},{"line_number":561,"context_line":"            msg \u003d six.text_type(e)"},{"line_number":562,"context_line":"            LOG.exception(msg)"},{"line_number":563,"context_line":"            msg \u003d (_(\"Virtual volume %s does not exists.\") % vvol_name)"},{"line_number":564,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"    def _check_quota(self, vvol_name):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_c695bee4","line":563,"in_reply_to":"da20952f_aa966d92","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                self.fs_name in export[0].file_system_label):"},{"line_number":580,"context_line":"            return True"},{"line_number":581,"context_line":"        else:"},{"line_number":582,"context_line":"            msg \u003d (_(\"Export %s does not exists.\") % export[0].export_name)"},{"line_number":583,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def _get_share_quota(self, share_id):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_2a37bdb1","line":582,"updated":"2015-08-26 22:24:51.000000000","message":"s/exists/exist/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                self.fs_name in export[0].file_system_label):"},{"line_number":580,"context_line":"            return True"},{"line_number":581,"context_line":"        else:"},{"line_number":582,"context_line":"            msg \u003d (_(\"Export %s does not exists.\") % export[0].export_name)"},{"line_number":583,"context_line":"            raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def _get_share_quota(self, share_id):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_869fc602","line":582,"in_reply_to":"da20952f_2a37bdb1","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"}],"manila/tests/share/drivers/hds/test_hds_hnas.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4ce649506069e5a262d312d702fd650aa0ee187d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        }"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def test_allow_access(self):"},{"line_number":122,"context_line":"        with mock.patch.object(ssh.HNASSSH, \u0027allow_access\u0027):"},{"line_number":123,"context_line":"            with mock.patch(\u0027manila.share.drivers.hds.hds_hnas.LOG\u0027)\\"},{"line_number":124,"context_line":"                    as mock_log:"},{"line_number":125,"context_line":"                self._driver.allow_access(self._context, self.share,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_afdf1ad5","line":122,"updated":"2015-07-31 10:59:33.000000000","message":"Use \"self.mock_object()\" instead.\n\nAlso, this test contains several cases. it should be splitted to separate tests.\n\nSame for all your unit tests.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        }"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def test_allow_access(self):"},{"line_number":122,"context_line":"        with mock.patch.object(ssh.HNASSSH, \u0027allow_access\u0027):"},{"line_number":123,"context_line":"            with mock.patch(\u0027manila.share.drivers.hds.hds_hnas.LOG\u0027)\\"},{"line_number":124,"context_line":"                    as mock_log:"},{"line_number":125,"context_line":"                self._driver.allow_access(self._context, self.share,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_df5478cb","line":122,"in_reply_to":"3a50d1a3_afdf1ad5","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"}],"manila/tests/share/drivers/hds/test_ssh.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"4ce649506069e5a262d312d702fd650aa0ee187d","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"CONF \u003d cfg.CONF"},{"line_number":22,"context_line":"from oslo_concurrency import processutils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"HNAS_RESULT_empty \u003d \"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_8f801e8d","line":21,"updated":"2015-07-31 10:59:33.000000000","message":"CONF is defined in wrong place. It should be after \"import\" groups.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"from oslo_config import cfg"},{"line_number":21,"context_line":"CONF \u003d cfg.CONF"},{"line_number":22,"context_line":"from oslo_concurrency import processutils"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"HNAS_RESULT_empty \u003d \"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_7f43e413","line":21,"in_reply_to":"3a50d1a3_8f801e8d","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"}],"manila/tests/share/drivers/hitachi/test_hds_hnas.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    def test_deny_access(self):"},{"line_number":164,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027deny_access\u0027)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        with mock.patch(\u0027manila.share.drivers.hitachi.hds_hnas.LOG\u0027)\\"},{"line_number":167,"context_line":"                as mock_log:"},{"line_number":168,"context_line":"            self._driver.deny_access(self._context, self.share,"},{"line_number":169,"context_line":"                                     self.access, self.server)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_0c5468c7","line":166,"updated":"2015-08-07 16:49:28.000000000","message":"Why do you need \"with\" statement? Why \"self.mock_object\" not used? Same for all other tests.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    def test_deny_access(self):"},{"line_number":164,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027deny_access\u0027)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        with mock.patch(\u0027manila.share.drivers.hitachi.hds_hnas.LOG\u0027)\\"},{"line_number":167,"context_line":"                as mock_log:"},{"line_number":168,"context_line":"            self._driver.deny_access(self._context, self.share,"},{"line_number":169,"context_line":"                                     self.access, self.server)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_616125a8","line":166,"in_reply_to":"1a4dcd0f_0c5468c7","updated":"2015-08-10 19:26:38.000000000","message":"Changed all \u0027with\u0027 statement to \u0027self.mock_object\u0027.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":142,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        self._driver.allow_access(self._context, self.share,"},{"line_number":145,"context_line":"                                  self.access, self.server)"},{"line_number":146,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":147,"context_line":"        self.assertTrue(mock_log.info.called)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_9ee023ce","line":144,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":168,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        self._driver.deny_access(self._context, self.share,"},{"line_number":171,"context_line":"                                 self.access, self.server)"},{"line_number":172,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":173,"context_line":"        self.assertTrue(mock_log.info.called)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_debf8ba8","line":170,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":207,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        self._driver.delete_share(self._context, self.share)"},{"line_number":210,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def test_ensure_share(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_5eb37be9","line":209,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":219,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        out \u003d self._driver.ensure_share(self._context, self.share)"},{"line_number":222,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":223,"context_line":"        self.assertEqual(export_list, out)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_3eb0efdc","line":221,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":234,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        self._driver.extend_share(self.share, 5)"},{"line_number":237,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":238,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_dea8eb79","line":236,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def test_create_snapshot(self):"},{"line_number":257,"context_line":"        # tests when hnas.create_snapshot returns successfully"},{"line_number":258,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027create_snapshot\u0027)"},{"line_number":259,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":260,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_fea3679c","line":258,"updated":"2015-08-11 12:02:32.000000000","message":"It is preferred to make assertions on mocked stuff.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":260,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        self._driver.create_snapshot(self._context,"},{"line_number":263,"context_line":"                                     self.snapshot)"},{"line_number":264,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":265,"context_line":"        self.assertTrue(mock_log.info.called)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_de71cb45","line":262,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":271,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        self._driver.delete_snapshot(self._context,"},{"line_number":274,"context_line":"                                     self.snapshot)"},{"line_number":275,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":276,"context_line":"        self.assertTrue(mock_log.info.called)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_1e78932a","line":273,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def test_manage_existing(self):"},{"line_number":293,"context_line":"        driver_op \u003d \u0027fake\u0027"},{"line_number":294,"context_line":"        manage_return \u003d {\u0027size\u0027: 1,"},{"line_number":295,"context_line":"                         \u0027export_locations\u0027:"},{"line_number":296,"context_line":"                             \u0027172.24.44.10:/mnt/nfs/volume-00002\u0027}"},{"line_number":297,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_5e85bb04","line":294,"updated":"2015-08-11 12:02:32.000000000","message":"http://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":343,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        self._driver.unmanage(self.share)"},{"line_number":346,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def test_update_share_stats(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_be9f1f5e","line":345,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":352,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        self._driver._update_share_stats()"},{"line_number":355,"context_line":"        self.assertTrue(mock_log.info.called)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_bec87f75","line":354,"updated":"2015-08-11 12:02:32.000000000","message":"What do you test here?\n\nNo stats verification.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            }"},{"line_number":136,"context_line":"        }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_init_invalid_evs_id(self):"},{"line_number":139,"context_line":"        self.mock_object(manila.share.driver.ShareDriver,"},{"line_number":140,"context_line":"                         \u0027__init__\u0027)"},{"line_number":141,"context_line":"        CONF.hds_hnas_evs_id \u003d None"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_24b7f83b","line":138,"updated":"2015-08-13 16:58:56.000000000","message":"Tests on line 138-178 can be defined easier using DDT:\n\n\"\"\"\n\n@ddt.data(\"hds_hnas_evs_id\", \"hds_hnas_evs_ip\", \"...\")\n\ndef test_invalid_init(self, attr_name):\n\n    self.mock_object(manila.share.driver.ShareDriver, \u0027__init__\u0027)\n\n    setattr(CONF, attr_name, None)\n\n    self.assertRaises(exception.InvalidParameterValue, self._driver.__init__)\n\n\"\"\"","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            }"},{"line_number":136,"context_line":"        }"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def test_init_invalid_evs_id(self):"},{"line_number":139,"context_line":"        self.mock_object(manila.share.driver.ShareDriver,"},{"line_number":140,"context_line":"                         \u0027__init__\u0027)"},{"line_number":141,"context_line":"        CONF.hds_hnas_evs_id \u003d None"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_274db599","line":138,"in_reply_to":"1a4dcd0f_24b7f83b","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        self._driver.delete_share(self._context, self.share)"},{"line_number":252,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def test_ensure_share(self):"},{"line_number":255,"context_line":"        export_list \u003d [\u0027172.24.44.10:/shares/fake_id\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_04ec3c28","line":252,"updated":"2015-08-13 16:58:56.000000000","message":"Nothing useful verified here.","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":249,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        self._driver.delete_share(self._context, self.share)"},{"line_number":252,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def test_ensure_share(self):"},{"line_number":255,"context_line":"        export_list \u003d [\u0027172.24.44.10:/shares/fake_id\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_f52e98aa","line":252,"in_reply_to":"1a4dcd0f_04ec3c28","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        self._driver.extend_share(self.share, 5)"},{"line_number":279,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":280,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def test_extend_share_invalid_share_protocol(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_04d3dc60","line":279,"updated":"2015-08-13 16:58:56.000000000","message":"and here.","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":276,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        self._driver.extend_share(self.share, 5)"},{"line_number":279,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":280,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def test_extend_share_invalid_share_protocol(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_d53d9cde","line":279,"in_reply_to":"1a4dcd0f_04d3dc60","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        self._driver.create_snapshot(self._context,"},{"line_number":305,"context_line":"                                     self.snapshot)"},{"line_number":306,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":307,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_delete_snapshot(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_a4c78897","line":306,"updated":"2015-08-13 16:58:56.000000000","message":"and here","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        self._driver.create_snapshot(self._context,"},{"line_number":305,"context_line":"                                     self.snapshot)"},{"line_number":306,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":307,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_delete_snapshot(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_9507141d","line":306,"in_reply_to":"1a4dcd0f_a4c78897","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        self._driver.delete_snapshot(self._context,"},{"line_number":316,"context_line":"                                     self.snapshot)"},{"line_number":317,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":318,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def test_create_share_from_snapshot(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_64c2e088","line":317,"updated":"2015-08-13 16:58:56.000000000","message":"and here.","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        self._driver.delete_snapshot(self._context,"},{"line_number":316,"context_line":"                                     self.snapshot)"},{"line_number":317,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":318,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def test_create_share_from_snapshot(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_35040017","line":317,"in_reply_to":"1a4dcd0f_64c2e088","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        self._driver.unmanage(self.share)"},{"line_number":439,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_update_share_stats(self):"},{"line_number":442,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027get_stats\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_64498032","line":439,"updated":"2015-08-13 16:58:56.000000000","message":"and here.","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        self._driver.unmanage(self.share)"},{"line_number":439,"context_line":"        self.assertTrue(mock_log.info.called)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_update_share_stats(self):"},{"line_number":442,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027get_stats\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_476a4183","line":439,"in_reply_to":"1a4dcd0f_64498032","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"99d7fcd734d384c3029e170e0e770bdc253c5f5c","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        self._driver._update_share_stats()"},{"line_number":448,"context_line":"        self.assertTrue(mock_log.info.called)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_04619ca8","line":448,"updated":"2015-08-13 16:58:56.000000000","message":"Code was executed. No verification that it did \"right\" things. Lots of tests suffer from it here.","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"96c4ebceb4e12e120f1975dcf3e2aad9973e2ab7","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        self._driver._update_share_stats()"},{"line_number":448,"context_line":"        self.assertTrue(mock_log.info.called)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_50675ab7","line":448,"in_reply_to":"1a4dcd0f_04619ca8","updated":"2015-08-14 12:52:11.000000000","message":"Done","commit_id":"eec3610da01253679095b29fca6cad030485dee4"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        self.nfs_export_list \u003d {"},{"line_number":99,"context_line":"            \u0027export_configuration\u0027: \u0027fake_export\u0027"},{"line_number":100,"context_line":"        }"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.share \u003d fake_share()"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_537977fb","line":99,"updated":"2015-08-18 04:26:37.000000000","message":"Dicts that fit on one line need not be wrapped.\n\nhttp://docs.openstack.org/developer/hacking/","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        self.nfs_export_list \u003d {"},{"line_number":99,"context_line":"            \u0027export_configuration\u0027: \u0027fake_export\u0027"},{"line_number":100,"context_line":"        }"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.share \u003d fake_share()"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_df4b3a58","line":99,"in_reply_to":"fa1b9901_537977fb","updated":"2015-08-18 14:58:34.000000000","message":"Done","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"155099bcc03be37ed678754cbc0a1b54a58e45e9","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":167,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self._driver.allow_access(self._context, self.share,"},{"line_number":170,"context_line":"                                  self.access, self.server)"},{"line_number":171,"context_line":"        ssh.HNASSSHBackend.allow_access.assert_called_once_with(\u0027fake_id\u0027,"},{"line_number":172,"context_line":"                                                                \u002710.0.0.2\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_135a1f84","line":169,"updated":"2015-08-18 04:26:37.000000000","message":"Please use white space to separate unit tests into 3 sections (mocks, call, asserts).  That makes the tests simpler to read.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"3efe8fb5be9017ee4a278b44baec7fb0bea9e0d9","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":167,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self._driver.allow_access(self._context, self.share,"},{"line_number":170,"context_line":"                                  self.access, self.server)"},{"line_number":171,"context_line":"        ssh.HNASSSHBackend.allow_access.assert_called_once_with(\u0027fake_id\u0027,"},{"line_number":172,"context_line":"                                                                \u002710.0.0.2\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_7a5c7c25","line":169,"in_reply_to":"fa1b9901_135a1f84","updated":"2015-08-18 14:58:34.000000000","message":"Done. Refactored test_ssh too.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def test_extend_share(self):"},{"line_number":262,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027extend_share\u0027)"},{"line_number":263,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":264,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        self._driver.extend_share(self.share, 5)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_4ac96325","line":263,"updated":"2015-08-19 15:18:15.000000000","message":"This logger could be mocked in comomn place - in \"setUp\" method.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def test_extend_share(self):"},{"line_number":262,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027extend_share\u0027)"},{"line_number":263,"context_line":"        mock_log \u003d self.mock_object(manila.share.drivers.hitachi.hds_hnas,"},{"line_number":264,"context_line":"                                    \u0027LOG\u0027)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        self._driver.extend_share(self.share, 5)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_f994d343","line":263,"in_reply_to":"fa1b9901_4ac96325","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            \u0027export_locations\u0027: [{\u0027path\u0027: \u0027172.24.44.10:/nfs/volume-00002\u0027}]"},{"line_number":390,"context_line":"        }"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        self.mock_object(share_types, \u0027get_share_type_extra_specs\u0027,"},{"line_number":393,"context_line":"                         mock.Mock(return_value\u003d\u0027False\u0027))"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        self.assertRaises(exception.ShareBackendException,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_4af08367","line":392,"updated":"2015-08-19 15:18:15.000000000","message":"make assertion on this mock?","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            \u0027export_locations\u0027: [{\u0027path\u0027: \u0027172.24.44.10:/nfs/volume-00002\u0027}]"},{"line_number":390,"context_line":"        }"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        self.mock_object(share_types, \u0027get_share_type_extra_specs\u0027,"},{"line_number":393,"context_line":"                         mock.Mock(return_value\u003d\u0027False\u0027))"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"        self.assertRaises(exception.ShareBackendException,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_64a336b3","line":392,"in_reply_to":"fa1b9901_4af08367","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":409,"context_line":"            \u0027export_locations\u0027: [{\u0027path\u0027: \u0027172.24.44.10:/volume-00002\u0027}]"},{"line_number":410,"context_line":"        }"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        self.mock_object(share_types, \u0027get_share_type_extra_specs\u0027,"},{"line_number":413,"context_line":"                         mock.Mock(return_value\u003d\u0027False\u0027))"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        self.assertRaises(exception.ShareBackendException,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_0ae60bb0","line":412,"updated":"2015-08-19 15:18:15.000000000","message":"same here?","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":409,"context_line":"            \u0027export_locations\u0027: [{\u0027path\u0027: \u0027172.24.44.10:/volume-00002\u0027}]"},{"line_number":410,"context_line":"        }"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        self.mock_object(share_types, \u0027get_share_type_extra_specs\u0027,"},{"line_number":413,"context_line":"                         mock.Mock(return_value\u003d\u0027False\u0027))"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        self.assertRaises(exception.ShareBackendException,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_449cf25c","line":412,"in_reply_to":"fa1b9901_0ae60bb0","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":429,"context_line":"            \u0027export_locations\u0027: [{\u0027path\u0027: \u00279.9.9.9:/nfs/volume-00002\u0027}]"},{"line_number":430,"context_line":"        }"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        self.mock_object(share_types, \u0027get_share_type_extra_specs\u0027,"},{"line_number":433,"context_line":"                         mock.Mock(return_value\u003d\u0027False\u0027))"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        self.assertRaises(exception.ShareBackendException,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_ca04934b","line":432,"updated":"2015-08-19 15:18:15.000000000","message":"and here?","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":429,"context_line":"            \u0027export_locations\u0027: [{\u0027path\u0027: \u00279.9.9.9:/nfs/volume-00002\u0027}]"},{"line_number":430,"context_line":"        }"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        self.mock_object(share_types, \u0027get_share_type_extra_specs\u0027,"},{"line_number":433,"context_line":"                         mock.Mock(return_value\u003d\u0027False\u0027))"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        self.assertRaises(exception.ShareBackendException,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_24977e3b","line":432,"in_reply_to":"fa1b9901_ca04934b","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        self._driver._update_share_stats()"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        ssh.HNASSSHBackend.get_stats.assert_called_once_with()"},{"line_number":458,"context_line":"        self.assertTrue(mock_log.info.called)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_6ac307ee","line":457,"updated":"2015-08-19 15:18:15.000000000","message":"Result of a func is not verified.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        self._driver._update_share_stats()"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        ssh.HNASSSHBackend.get_stats.assert_called_once_with()"},{"line_number":458,"context_line":"        self.assertTrue(mock_log.info.called)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_bffe3bac","line":457,"in_reply_to":"fa1b9901_6ac307ee","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            \u0027pk_path\u0027: \u0027fake_pk_path\u0027,"},{"line_number":89,"context_line":"            \u0027backend_details\u0027: {"},{"line_number":90,"context_line":"                \u0027public_address\u0027: \u00271.2.3.4\u0027,"},{"line_number":91,"context_line":"                \u0027instance_id\u0027: \u0027fake\u0027"},{"line_number":92,"context_line":"            }"},{"line_number":93,"context_line":"        }"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_4ac1d1e3","line":91,"updated":"2015-08-26 22:24:51.000000000","message":"Nit: lines in multi-line dicts should end with commas.  Same elsewhere.\n\nhttp://docs.openstack.org/developer/hacking/","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            \u0027pk_path\u0027: \u0027fake_pk_path\u0027,"},{"line_number":89,"context_line":"            \u0027backend_details\u0027: {"},{"line_number":90,"context_line":"                \u0027public_address\u0027: \u00271.2.3.4\u0027,"},{"line_number":91,"context_line":"                \u0027instance_id\u0027: \u0027fake\u0027"},{"line_number":92,"context_line":"            }"},{"line_number":93,"context_line":"        }"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_e6d80256","line":91,"in_reply_to":"da20952f_4ac1d1e3","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            \u0027share_id\u0027: \u0027fake_name\u0027,"},{"line_number":130,"context_line":"        }"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        self.fake_type_w_extra \u003d {"},{"line_number":133,"context_line":"            \u0027test_with_extra\u0027: {"},{"line_number":134,"context_line":"                \u0027deleted\u0027: \u00270\u0027,"},{"line_number":135,"context_line":"                \u0027deleted_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_6aaa951b","line":132,"updated":"2015-08-26 22:24:51.000000000","message":"w?  Can you spell that out, please?","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            \u0027share_id\u0027: \u0027fake_name\u0027,"},{"line_number":130,"context_line":"        }"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        self.fake_type_w_extra \u003d {"},{"line_number":133,"context_line":"            \u0027test_with_extra\u0027: {"},{"line_number":134,"context_line":"                \u0027deleted\u0027: \u00270\u0027,"},{"line_number":135,"context_line":"                \u0027deleted_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_86b026df","line":132,"in_reply_to":"da20952f_6aaa951b","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"}],"manila/tests/share/drivers/hitachi/test_ssh.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"HNAS_RESULT_empty \u003d \"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"HNAS_RESULT_limits \u003d \\"},{"line_number":29,"context_line":"    \"Filesystem Ensure on span husvm02:            \\n\\n\\"},{"line_number":30,"context_line":"Current capacity                             50GiB \\n\\n\\"},{"line_number":31,"context_line":"Thin provision:                           disabled \\n\\n\\"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_acb1b4e1","line":28,"updated":"2015-08-07 16:49:28.000000000","message":"maybe would be better to use \"\"\" \"\"\" ?","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"9f9b723c071c5887102f28ce0d6e04131c73307d","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"HNAS_RESULT_empty \u003d \"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"HNAS_RESULT_limits \u003d \\"},{"line_number":29,"context_line":"    \"Filesystem Ensure on span husvm02:            \\n\\n\\"},{"line_number":30,"context_line":"Current capacity                             50GiB \\n\\n\\"},{"line_number":31,"context_line":"Thin provision:                           disabled \\n\\n\\"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_6f24f9c5","line":28,"in_reply_to":"1a4dcd0f_acb1b4e1","updated":"2015-08-07 19:07:53.000000000","message":"What are the drawbacks of \u0027\\\u0027??","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ad6ab1520e3ccf42184648044ef7f2f585fcafb","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        }"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def test_get_stats(self):"},{"line_number":282,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027_execute\u0027,"},{"line_number":283,"context_line":"                         mock.Mock(side_effect\u003d[(HNAS_RESULT_fslimits, \"\"),"},{"line_number":284,"context_line":"                                                (HNAS_RESULT_vvol_list, \"\"),"},{"line_number":285,"context_line":"                                                (HNAS_RESULT_quota, \"\"),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_6cf64c90","line":282,"updated":"2015-08-07 16:49:28.000000000","message":"it would be good to make assertion on mocked stuff.","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"852732a0e5de2c4a2d1836604717670443425bff","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        }"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def test_get_stats(self):"},{"line_number":282,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027_execute\u0027,"},{"line_number":283,"context_line":"                         mock.Mock(side_effect\u003d[(HNAS_RESULT_fslimits, \"\"),"},{"line_number":284,"context_line":"                                                (HNAS_RESULT_vvol_list, \"\"),"},{"line_number":285,"context_line":"                                                (HNAS_RESULT_quota, \"\"),"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_4b53e339","line":282,"in_reply_to":"1a4dcd0f_6cf64c90","updated":"2015-08-10 19:26:38.000000000","message":"Added more asserts and changed all \u0027with\u0027 statement to mock_object","commit_id":"bb72b7ed384d6b30a33cd022a13a85a6d87d89a4"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                                                (HNAS_RESULT_export, \"\"),"},{"line_number":330,"context_line":"                                                (HNAS_RESULT_expmod, \"\")]))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        self._driver.deny_access(self.vvol[\u0027id\u0027], self.vvol[\u0027host\u0027],"},{"line_number":333,"context_line":"                                 self.vvol[\u0027share_proto\u0027], \u0027rw\u0027)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def test_delete_share(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_1e3bb339","line":332,"updated":"2015-08-11 12:02:32.000000000","message":"No assertions at all!","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                                                (HNAS_RESULT_job, \"\")]))"},{"line_number":344,"context_line":"        mock_log \u003d self.mock_object(ssh, \u0027LOG\u0027)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        self._driver.delete_share(self.vvol[\u0027id\u0027],"},{"line_number":347,"context_line":"                                  self.vvol[\u0027share_proto\u0027])"},{"line_number":348,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":349,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_5e0ffb87","line":346,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                                                (HNAS_RESULT_empty, \"\")]))"},{"line_number":447,"context_line":"        mock_log \u003d self.mock_object(ssh, \u0027LOG\u0027)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        self._driver.extend_share(self.vvol[\u0027id\u0027],"},{"line_number":450,"context_line":"                                  self.vvol[\u0027size\u0027],"},{"line_number":451,"context_line":"                                  self.vvol[\u0027share_proto\u0027])"},{"line_number":452,"context_line":"        self.assertTrue(mock_log.debug.called)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_de1b0bc9","line":449,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7ceb39a7d566414cb2137e0f46e4458ba47e1d58","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                         mock.Mock(return_value\u003d(HNAS_RESULT_job, \"\")))"},{"line_number":492,"context_line":"        mock_log \u003d self.mock_object(ssh, \u0027LOG\u0027)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        self._driver.create_snapshot(self.vvol[\u0027id\u0027],"},{"line_number":495,"context_line":"                                     self.snapshot[\u0027id\u0027])"},{"line_number":496,"context_line":"        self.assertTrue(mock_log.debug.called)"},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_7e7997fb","line":494,"updated":"2015-08-11 12:02:32.000000000","message":"Code executed, but no reasonable assertions.","commit_id":"8256930c4f99ed2c3b8ed5d593550acf5f15512a"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"HNAS_RESULT_empty \u003d \"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"HNAS_RESULT_limits \u003d \\"},{"line_number":30,"context_line":"    \"Filesystem Ensure on span husvm02:            \\n\\n\\"},{"line_number":31,"context_line":"Current capacity                             50GiB \\n\\n\\"},{"line_number":32,"context_line":"Thin provision:                           disabled \\n\\n\\"},{"line_number":33,"context_line":"Filesystem is confined to:                  100GiB   \" \\"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_0a104b58","line":30,"updated":"2015-08-19 15:18:15.000000000","message":"Some time ago, I asked about using here \"\"\"foo\"\"\"\n\nMaybe it is better to use such strings here?","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"01648643cfa4638f29790ec514c0b142c3cb7a10","unresolved":false,"context_lines":[{"line_number":27,"context_line":"HNAS_RESULT_empty \u003d \"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"HNAS_RESULT_limits \u003d \\"},{"line_number":30,"context_line":"    \"Filesystem Ensure on span husvm02:            \\n\\n\\"},{"line_number":31,"context_line":"Current capacity                             50GiB \\n\\n\\"},{"line_number":32,"context_line":"Thin provision:                           disabled \\n\\n\\"},{"line_number":33,"context_line":"Filesystem is confined to:                  100GiB   \" \\"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_7d740135","line":30,"in_reply_to":"fa1b9901_0a104b58","updated":"2015-08-20 12:16:52.000000000","message":"Valery, we do need the slashes here. We need to represent the exactly output of the storage, so one \u0027\\\u0027 escapes the \u0027\\n\u0027 needed to limit the line size in 80. So, even using \"\"\" we will need to use that.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"        mock_log \u003d self.mock_object(ssh, \u0027LOG\u0027)"},{"line_number":1004,"context_line":"        self.mock_object(paramiko.SSHClient, \u0027connect\u0027)"},{"line_number":1005,"context_line":"        self.mock_object(putils, \u0027ssh_execute\u0027,"},{"line_number":1006,"context_line":"                         mock.Mock(side_effect\u003dputils.ProcessExecutionError))"},{"line_number":1007,"context_line":""},{"line_number":1008,"context_line":"        self.assertRaises(putils.ProcessExecutionError,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_6d7b218d","line":1005,"updated":"2015-08-19 15:18:15.000000000","message":"I do not insist, but it happens to be very useful to make assertions on mocked stuff that are expected to be called.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"        mock_log \u003d self.mock_object(ssh, \u0027LOG\u0027)"},{"line_number":1004,"context_line":"        self.mock_object(paramiko.SSHClient, \u0027connect\u0027)"},{"line_number":1005,"context_line":"        self.mock_object(putils, \u0027ssh_execute\u0027,"},{"line_number":1006,"context_line":"                         mock.Mock(side_effect\u003dputils.ProcessExecutionError))"},{"line_number":1007,"context_line":""},{"line_number":1008,"context_line":"        self.assertRaises(putils.ProcessExecutionError,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_9b0ca4ee","line":1005,"in_reply_to":"fa1b9901_6d7b218d","updated":"2015-08-20 14:46:57.000000000","message":"Done.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"HNAS_RESULT_empty \u003d \"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"HNAS_RESULT_limits \u003d \"\"\""},{"line_number":30,"context_line":"Filesystem Ensure on span fake_fs:"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Current capacity                             50GiB"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_4a36b104","line":29,"updated":"2015-08-26 22:24:51.000000000","message":"If this section (the fake data) gets any larger, you might consider moving it to a separate fakes file.","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"HNAS_RESULT_empty \u003d \"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"HNAS_RESULT_limits \u003d \"\"\""},{"line_number":30,"context_line":"Filesystem Ensure on span fake_fs:"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Current capacity                             50GiB"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_ccd07d56","line":29,"in_reply_to":"da20952f_4a36b104","updated":"2015-08-27 14:21:15.000000000","message":"I\u0027m considering do this if we need add more outputs.","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"1aa061546bb7661d12228192733774a2cb9ebb28","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self._driver.allow_access(self.vvol[\u0027id\u0027], self.vvol[\u0027host\u0027],"},{"line_number":381,"context_line":"                                  self.vvol[\u0027share_proto\u0027])"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        # assert that _execute sent the right mod command"},{"line_number":384,"context_line":"        ssh.HNASSSHBackend._execute.assert_called_with(fake_mod_command)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def test_allow_access_host_allowed(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_8d3143ef","line":383,"updated":"2015-08-26 22:24:51.000000000","message":"From PEP-8: \"If a comment is a phrase or sentence, its first word should be capitalized...\"\n\nPlease fix everywhere in this change set.\n\nhttps://www.python.org/dev/peps/pep-0008/#comments","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"addc1eb6be376337b8cd6097dcbdd0441786067b","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self._driver.allow_access(self.vvol[\u0027id\u0027], self.vvol[\u0027host\u0027],"},{"line_number":381,"context_line":"                                  self.vvol[\u0027share_proto\u0027])"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        # assert that _execute sent the right mod command"},{"line_number":384,"context_line":"        ssh.HNASSSHBackend._execute.assert_called_with(fake_mod_command)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def test_allow_access_host_allowed(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_a6aa0ad3","line":383,"in_reply_to":"da20952f_8d3143ef","updated":"2015-08-27 14:21:15.000000000","message":"Done","commit_id":"aad1115fc69133d9df2d9adb9c909ef254d7b16b"}],"manila/tests/test_utils.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def test_check_ssh_injection(self):"},{"line_number":334,"context_line":"        cmd_list \u003d [\u0027ssh\u0027, \u0027-D\u0027, \u0027my_name@name_of_remote_computer\u0027]"},{"line_number":335,"context_line":"        self.assertIsNone(utils.check_ssh_injection(cmd_list))"},{"line_number":336,"context_line":"        cmd_list \u003d [\u0027echo\u0027, \u0027\"quoted arg with space\"\u0027]"},{"line_number":337,"context_line":"        self.assertIsNone(utils.check_ssh_injection(cmd_list))"},{"line_number":338,"context_line":"        cmd_list \u003d [\u0027echo\u0027, \"\u0027quoted arg with space\u0027\"]"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_8de55539","line":335,"updated":"2015-08-19 15:18:15.000000000","message":"It should separate test cases.","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def test_check_ssh_injection(self):"},{"line_number":334,"context_line":"        cmd_list \u003d [\u0027ssh\u0027, \u0027-D\u0027, \u0027my_name@name_of_remote_computer\u0027]"},{"line_number":335,"context_line":"        self.assertIsNone(utils.check_ssh_injection(cmd_list))"},{"line_number":336,"context_line":"        cmd_list \u003d [\u0027echo\u0027, \u0027\"quoted arg with space\"\u0027]"},{"line_number":337,"context_line":"        self.assertIsNone(utils.check_ssh_injection(cmd_list))"},{"line_number":338,"context_line":"        cmd_list \u003d [\u0027echo\u0027, \"\u0027quoted arg with space\u0027\"]"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_23d2e65c","line":335,"in_reply_to":"fa1b9901_8de55539","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"0184fca92c511292df7c1269e89d3903492c519d","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        self.assertIsNone(utils.check_ssh_injection(cmd_list))"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def test_check_ssh_injection_on_error(self):"},{"line_number":342,"context_line":"        with_unquoted_space \u003d [\u0027ssh\u0027, \u0027my_name@      name_of_remote_computer\u0027]"},{"line_number":343,"context_line":"        self.assertRaises(exception.SSHInjectionThreat,"},{"line_number":344,"context_line":"                          utils.check_ssh_injection,"},{"line_number":345,"context_line":"                          with_unquoted_space)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_adb93917","line":342,"updated":"2015-08-19 15:18:15.000000000","message":"Same here, one test case - one method.\n\nIt is expected to use here tool \"ddt\".","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"117ff27e8bdd15a99d419de2253b51c9d630d761","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        self.assertIsNone(utils.check_ssh_injection(cmd_list))"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def test_check_ssh_injection_on_error(self):"},{"line_number":342,"context_line":"        with_unquoted_space \u003d [\u0027ssh\u0027, \u0027my_name@      name_of_remote_computer\u0027]"},{"line_number":343,"context_line":"        self.assertRaises(exception.SSHInjectionThreat,"},{"line_number":344,"context_line":"                          utils.check_ssh_injection,"},{"line_number":345,"context_line":"                          with_unquoted_space)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa1b9901_e3c70e96","line":342,"in_reply_to":"fa1b9901_adb93917","updated":"2015-08-20 14:46:57.000000000","message":"Done","commit_id":"60a3355870259bf4a6f34dc7c4b17aedbce3a386"}],"manila/utils.py":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"138280b3e0e02995282152cf9e8aa25e951a950e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            self.current_size -\u003d 1"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def check_ssh_injection(cmd_list):"},{"line_number":152,"context_line":"    ssh_injection_pattern \u003d [\u0027`\u0027, \u0027$\u0027, \u0027|\u0027, \u0027||\u0027, \u0027;\u0027, \u0027\u0026\u0027, \u0027\u0026\u0026\u0027, \u0027\u003e\u0027, \u0027\u003e\u003e\u0027,"},{"line_number":153,"context_line":"                             \u0027\u003c\u0027]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_938bf5c2","line":151,"updated":"2015-07-22 21:12:41.000000000","message":"Need a test for this :). There\u0027s an implementation on Cinder.","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"00b838c83c800fbbcdb8cbba53ca852b831bf307","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            self.current_size -\u003d 1"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def check_ssh_injection(cmd_list):"},{"line_number":152,"context_line":"    ssh_injection_pattern \u003d [\u0027`\u0027, \u0027$\u0027, \u0027|\u0027, \u0027||\u0027, \u0027;\u0027, \u0027\u0026\u0027, \u0027\u0026\u0026\u0027, \u0027\u003e\u0027, \u0027\u003e\u003e\u0027,"},{"line_number":153,"context_line":"                             \u0027\u003c\u0027]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_ffe1342b","line":151,"in_reply_to":"3a50d1a3_938bf5c2","updated":"2015-07-31 19:58:19.000000000","message":"Done","commit_id":"8c022791f2deffe437ec11a1e39918da9e7903bf"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"a85b98acdc6a070b04dc149796466a38e4049a3e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            self.current_size -\u003d 1"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def check_ssh_injection(cmd_list):"},{"line_number":152,"context_line":"    ssh_injection_pattern \u003d [\u0027`\u0027, \u0027$\u0027, \u0027|\u0027, \u0027||\u0027, \u0027;\u0027, \u0027\u0026\u0027, \u0027\u0026\u0026\u0027, \u0027\u003e\u0027, \u0027\u003e\u003e\u0027,"},{"line_number":153,"context_line":"                             \u0027\u003c\u0027]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_5703c30f","line":151,"updated":"2015-08-17 14:11:11.000000000","message":"s/check_ssh_injection/check_shell_enjection","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"b0334d45a4042baaed9727b4621421251533279b","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            self.current_size -\u003d 1"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def check_ssh_injection(cmd_list):"},{"line_number":152,"context_line":"    ssh_injection_pattern \u003d [\u0027`\u0027, \u0027$\u0027, \u0027|\u0027, \u0027||\u0027, \u0027;\u0027, \u0027\u0026\u0027, \u0027\u0026\u0026\u0027, \u0027\u003e\u0027, \u0027\u003e\u003e\u0027,"},{"line_number":153,"context_line":"                             \u0027\u003c\u0027]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_0b04427c","line":151,"in_reply_to":"fa1b9901_2b6346b3","updated":"2015-08-17 15:11:57.000000000","message":"Yes, Injection is used correctly, but \u0027ssh\u0027 - shouldn\u0027t be used here, because this function checks SHELL (and in more general meaning - CODE) injections.","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":14232,"name":"Igor Malinovskiy","email":"u.glide@gmail.com","username":"imalinovskiy"},"change_message_id":"6b4b69390724e771402875dad2b73830acf70b1b","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            self.current_size -\u003d 1"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def check_ssh_injection(cmd_list):"},{"line_number":152,"context_line":"    ssh_injection_pattern \u003d [\u0027`\u0027, \u0027$\u0027, \u0027|\u0027, \u0027||\u0027, \u0027;\u0027, \u0027\u0026\u0027, \u0027\u0026\u0026\u0027, \u0027\u003e\u0027, \u0027\u003e\u003e\u0027,"},{"line_number":153,"context_line":"                             \u0027\u003c\u0027]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_955e3344","line":151,"in_reply_to":"fa1b9901_55e5fba5","updated":"2015-08-17 14:46:22.000000000","message":"It\u0027s the same, but correct name should be:\ncheck_shell_enjection or check_command_enjection","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"454b20e1eaeddb6e1ff203768a275e9960f664f6","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            self.current_size -\u003d 1"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def check_ssh_injection(cmd_list):"},{"line_number":152,"context_line":"    ssh_injection_pattern \u003d [\u0027`\u0027, \u0027$\u0027, \u0027|\u0027, \u0027||\u0027, \u0027;\u0027, \u0027\u0026\u0027, \u0027\u0026\u0026\u0027, \u0027\u003e\u0027, \u0027\u003e\u003e\u0027,"},{"line_number":153,"context_line":"                             \u0027\u003c\u0027]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_55e5fba5","line":151,"in_reply_to":"fa1b9901_5703c30f","updated":"2015-08-17 14:42:01.000000000","message":"This is the same as in Cinder project: https://github.com/openstack/cinder/blob/4bba79d2/cinder/utils.py#L155","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"c8265711278b14ed9bb539190cbafeceb30cf77c","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            self.current_size -\u003d 1"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def check_ssh_injection(cmd_list):"},{"line_number":152,"context_line":"    ssh_injection_pattern \u003d [\u0027`\u0027, \u0027$\u0027, \u0027|\u0027, \u0027||\u0027, \u0027;\u0027, \u0027\u0026\u0027, \u0027\u0026\u0026\u0027, \u0027\u003e\u0027, \u0027\u003e\u003e\u0027,"},{"line_number":153,"context_line":"                             \u0027\u003c\u0027]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_2b6346b3","line":151,"in_reply_to":"fa1b9901_955e3344","updated":"2015-08-17 15:06:23.000000000","message":"That\u0027s still is not a reason. Injection is the correct meaning[1].\n\nhttps://en.wikipedia.org/wiki/Code_injection","commit_id":"bb5f9420e8504d957b69e23708bb52d4b82fe5a9"}]}
