)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for CIFS shares in HNAS driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Updating Manila Hitachi HNAS driver to support shares in CIFS protocol."},{"line_number":10,"context_line":"It accepts \u0027user\u0027 as access type and rw and ro as access level."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I18fd5afcea6f91d870bbfc256c71a92aad014c91"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fad55976_27236d07","line":9,"range":{"start_line":9,"start_character":54,"end_line":9,"end_character":56},"updated":"2016-07-15 18:02:10.000000000","message":"s/in/using","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for CIFS shares in HNAS driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Updating Manila Hitachi HNAS driver to support shares in CIFS protocol."},{"line_number":10,"context_line":"It accepts \u0027user\u0027 as access type and rw and ro as access level."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I18fd5afcea6f91d870bbfc256c71a92aad014c91"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dada55a8_2337d3b1","line":9,"range":{"start_line":9,"start_character":54,"end_line":9,"end_character":56},"in_reply_to":"fad55976_27236d07","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for CIFS shares in HNAS driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Updating Manila Hitachi HNAS driver to support shares in CIFS protocol."},{"line_number":10,"context_line":"It accepts \u0027user\u0027 as access type and rw and ro as access level."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I18fd5afcea6f91d870bbfc256c71a92aad014c91"},{"line_number":13,"context_line":"Implements: blueprint hnas-driver-cifs-support"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fad55976_e78795d5","line":10,"range":{"start_line":10,"start_character":33,"end_line":10,"end_character":39},"updated":"2016-07-15 18:02:10.000000000","message":"s/and rw/and both rw","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add support for CIFS shares in HNAS driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Updating Manila Hitachi HNAS driver to support shares in CIFS protocol."},{"line_number":10,"context_line":"It accepts \u0027user\u0027 as access type and rw and ro as access level."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I18fd5afcea6f91d870bbfc256c71a92aad014c91"},{"line_number":13,"context_line":"Implements: blueprint hnas-driver-cifs-support"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dada55a8_e355bbc6","line":10,"range":{"start_line":10,"start_character":33,"end_line":10,"end_character":39},"in_reply_to":"fad55976_e78795d5","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"}],"doc/source/devref/share_back_ends_feature_support_mapping.rst":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":137,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":138,"context_line":"|                  HDFS                  |         \\-       |         \\-      |         \\-       |"},{"line_number":139,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":140,"context_line":"|              Hitachi HNAS              |         N        |         N       |        \\-        |"},{"line_number":141,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":142,"context_line":"|                HPE 3PAR                |        \\-        |        \\-       |        \\-        |"},{"line_number":143,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fad55976_4754a153","line":140,"range":{"start_line":140,"start_character":50,"end_line":140,"end_character":73},"updated":"2016-07-15 18:02:10.000000000","message":"this is not quite correct, we are not configuring those, it requires DHSS\u003dTrue mode driver to do so. The admin has to configure outside of manila.","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0bcc1289889192a23d71e52452c80c34e89664cd","unresolved":false,"context_lines":[{"line_number":137,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":138,"context_line":"|                  HDFS                  |         \\-       |         \\-      |         \\-       |"},{"line_number":139,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":140,"context_line":"|              Hitachi HNAS              |         N        |         N       |        \\-        |"},{"line_number":141,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":142,"context_line":"|                HPE 3PAR                |        \\-        |        \\-       |        \\-        |"},{"line_number":143,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dada55a8_c9cef1b3","line":140,"range":{"start_line":140,"start_character":50,"end_line":140,"end_character":73},"in_reply_to":"fad55976_4754a153","updated":"2016-07-17 15:18:09.000000000","message":"+1","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":137,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":138,"context_line":"|                  HDFS                  |         \\-       |         \\-      |         \\-       |"},{"line_number":139,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":140,"context_line":"|              Hitachi HNAS              |         N        |         N       |        \\-        |"},{"line_number":141,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":142,"context_line":"|                HPE 3PAR                |        \\-        |        \\-       |        \\-        |"},{"line_number":143,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fad55976_258365ce","line":140,"range":{"start_line":140,"start_character":50,"end_line":140,"end_character":73},"in_reply_to":"fad55976_4754a153","updated":"2016-07-19 16:01:47.000000000","message":"Oh, ok. Changing it.","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4b1f8d8d35c2e075b7f7ac802ab1768faa59b72a","unresolved":false,"context_lines":[{"line_number":137,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":138,"context_line":"|                  HDFS                  |         \\-       |         \\-      |         \\-       |"},{"line_number":139,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":140,"context_line":"|              Hitachi HNAS              |        \\-        |        \\-       |        \\-        |"},{"line_number":141,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":142,"context_line":"|                HPE 3PAR                |        \\-        |        \\-       |        \\-        |"},{"line_number":143,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"}],"source_content_type":"text/x-rst","patch_set":7,"id":"dada55a8_be7e7f16","line":140,"range":{"start_line":140,"start_character":0,"end_line":140,"end_character":98},"updated":"2016-07-27 12:43:45.000000000","message":"there should not be any modifications to this line (spacing)","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":137,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":138,"context_line":"|                  HDFS                  |         \\-       |         \\-      |         \\-       |"},{"line_number":139,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":140,"context_line":"|              Hitachi HNAS              |        \\-        |        \\-       |        \\-        |"},{"line_number":141,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"},{"line_number":142,"context_line":"|                HPE 3PAR                |        \\-        |        \\-       |        \\-        |"},{"line_number":143,"context_line":"+----------------------------------------+------------------+-----------------+------------------+"}],"source_content_type":"text/x-rst","patch_set":7,"id":"bacf61ea_45201d4a","line":140,"range":{"start_line":140,"start_character":0,"end_line":140,"end_character":98},"in_reply_to":"dada55a8_be7e7f16","updated":"2016-07-28 14:28:29.000000000","message":"we need an urgent patch to fix all this columns! :p","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"}],"manila/share/drivers/hitachi/hds_hnas.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               help\u003d\"Python class to be used for driver helper.\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027hds_hnas_cifs_snapshot_while_mounted\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\u0027By default, in Manila HNAS Driver, cifs snapshots are \u0027"},{"line_number":67,"context_line":"                     \u0027disabled when the share is mounted, since it uses \u0027"},{"line_number":68,"context_line":"                     \u0027tree-clone to create snapshots and does not guarantee \u0027"},{"line_number":69,"context_line":"                     \u0027point-in-time replicas when source directory tree is \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_47db01ee","line":66,"range":{"start_line":66,"start_character":57,"end_line":66,"end_character":61},"updated":"2016-07-15 18:02:10.000000000","message":"s/cifs/CIFS","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               help\u003d\"Python class to be used for driver helper.\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027hds_hnas_cifs_snapshot_while_mounted\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\u0027By default, in Manila HNAS Driver, cifs snapshots are \u0027"},{"line_number":67,"context_line":"                     \u0027disabled when the share is mounted, since it uses \u0027"},{"line_number":68,"context_line":"                     \u0027tree-clone to create snapshots and does not guarantee \u0027"},{"line_number":69,"context_line":"                     \u0027point-in-time replicas when source directory tree is \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_e5bb0d74","line":66,"range":{"start_line":66,"start_character":57,"end_line":66,"end_character":61},"in_reply_to":"fad55976_47db01ee","updated":"2016-07-19 16:01:47.000000000","message":"Updated the whole description.","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               help\u003d\"Python class to be used for driver helper.\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027hds_hnas_cifs_snapshot_while_mounted\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\u0027By default, in Manila HNAS Driver, cifs snapshots are \u0027"},{"line_number":67,"context_line":"                     \u0027disabled when the share is mounted, since it uses \u0027"},{"line_number":68,"context_line":"                     \u0027tree-clone to create snapshots and does not guarantee \u0027"},{"line_number":69,"context_line":"                     \u0027point-in-time replicas when source directory tree is \u0027"},{"line_number":70,"context_line":"                     \u0027changing. Enable if your source directory can be static\u0027"},{"line_number":71,"context_line":"                     \u0027when taking snapshots. Currently, it affects only CIFS\u0027"},{"line_number":72,"context_line":"                     \u0027protocol. For more information check the \u0027"},{"line_number":73,"context_line":"                     \u0027driver manual and tree-clone feature in HNAS.\u0027),"},{"line_number":74,"context_line":"]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_8ab98031","line":73,"range":{"start_line":66,"start_character":22,"end_line":73,"end_character":67},"updated":"2016-07-15 18:02:10.000000000","message":"this is a good description to be in the manual, but I think this help text should be more objective about what the False/True options do. My suggestion:\n\n\"By default, snapshots are not allowed to be taken when the share has clients connected because consistent point-in-time cannot be guaranteed for all files. Enable this option to allow so.\"","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               help\u003d\"Python class to be used for driver helper.\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027hds_hnas_cifs_snapshot_while_mounted\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\u0027By default, in Manila HNAS Driver, cifs snapshots are \u0027"},{"line_number":67,"context_line":"                     \u0027disabled when the share is mounted, since it uses \u0027"},{"line_number":68,"context_line":"                     \u0027tree-clone to create snapshots and does not guarantee \u0027"},{"line_number":69,"context_line":"                     \u0027point-in-time replicas when source directory tree is \u0027"},{"line_number":70,"context_line":"                     \u0027changing. Enable if your source directory can be static\u0027"},{"line_number":71,"context_line":"                     \u0027when taking snapshots. Currently, it affects only CIFS\u0027"},{"line_number":72,"context_line":"                     \u0027protocol. For more information check the \u0027"},{"line_number":73,"context_line":"                     \u0027driver manual and tree-clone feature in HNAS.\u0027),"},{"line_number":74,"context_line":"]"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_259fe504","line":73,"range":{"start_line":66,"start_character":22,"end_line":73,"end_character":67},"in_reply_to":"fad55976_8ab98031","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":173,"context_line":"            self._nfs_update_access(share, hnas_share_id, access_rules)"},{"line_number":174,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":175,"context_line":"            if add_rules:"},{"line_number":176,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"},{"line_number":177,"context_line":"            if delete_rules:"},{"line_number":178,"context_line":"                self._cifs_deny_access(hnas_share_id, delete_rules)"},{"line_number":179,"context_line":"        else:"},{"line_number":180,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol is currently supported.\")"},{"line_number":181,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_0a447072","line":178,"range":{"start_line":175,"start_character":13,"end_line":178,"end_character":67},"updated":"2016-07-15 18:02:10.000000000","message":"how about recovery mode?","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":173,"context_line":"            self._nfs_update_access(share, hnas_share_id, access_rules)"},{"line_number":174,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":175,"context_line":"            if add_rules:"},{"line_number":176,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"},{"line_number":177,"context_line":"            if delete_rules:"},{"line_number":178,"context_line":"                self._cifs_deny_access(hnas_share_id, delete_rules)"},{"line_number":179,"context_line":"        else:"},{"line_number":180,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol is currently supported.\")"},{"line_number":181,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_19f5a5ca","line":178,"range":{"start_line":175,"start_character":13,"end_line":178,"end_character":67},"in_reply_to":"fad55976_0a447072","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]})"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def _cifs_deny_access(self, hnas_share_id, delete_rules):"},{"line_number":231,"context_line":"        for rule in delete_rules:"},{"line_number":232,"context_line":"            if rule[\u0027access_type\u0027].lower() !\u003d \u0027user\u0027:"},{"line_number":233,"context_line":"                msg \u003d _(\"Only USER access type currently supported for CIFS.\")"},{"line_number":234,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"            formatted_user \u003d rule[\u0027access_to\u0027].replace(\u0027\\\\\u0027, \u0027\\\\\\\\\u0027)"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_6a552c1c","line":234,"range":{"start_line":231,"start_character":9,"end_line":234,"end_character":62},"updated":"2016-07-15 18:02:10.000000000","message":"you should not throw exception in this case, else this rule will never be deleted and will remain in error state forever in DB.","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                                     \u0027share\u0027: share[\u0027id\u0027]})"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def _cifs_deny_access(self, hnas_share_id, delete_rules):"},{"line_number":231,"context_line":"        for rule in delete_rules:"},{"line_number":232,"context_line":"            if rule[\u0027access_type\u0027].lower() !\u003d \u0027user\u0027:"},{"line_number":233,"context_line":"                msg \u003d _(\"Only USER access type currently supported for CIFS.\")"},{"line_number":234,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"            formatted_user \u003d rule[\u0027access_to\u0027].replace(\u0027\\\\\u0027, \u0027\\\\\\\\\u0027)"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_e562ed15","line":234,"range":{"start_line":231,"start_character":9,"end_line":234,"end_character":62},"in_reply_to":"fad55976_6a552c1c","updated":"2016-07-19 16:01:47.000000000","message":"Changed to logging a message.","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0bcc1289889192a23d71e52452c80c34e89664cd","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        if (share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027 and"},{"line_number":259,"context_line":"                share[\u0027share_proto\u0027].lower() !\u003d \u0027cifs\u0027):"},{"line_number":260,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol is currently supported.\")"},{"line_number":261,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        uri \u003d self._create_share(share[\u0027id\u0027], share[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_09e4890b","line":260,"range":{"start_line":260,"start_character":47,"end_line":260,"end_character":49},"updated":"2016-07-17 15:18:09.000000000","message":"s/is /are","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        if (share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027 and"},{"line_number":259,"context_line":"                share[\u0027share_proto\u0027].lower() !\u003d \u0027cifs\u0027):"},{"line_number":260,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol is currently supported.\")"},{"line_number":261,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        uri \u003d self._create_share(share[\u0027id\u0027], share[\u0027size\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_a341033c","line":260,"range":{"start_line":260,"start_character":47,"end_line":260,"end_character":49},"in_reply_to":"dada55a8_09e4890b","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0bcc1289889192a23d71e52452c80c34e89664cd","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            old_path_info \u003d share[\u0027export_locations\u0027][0][\u0027path\u0027].split(\u0027:\u0027)"},{"line_number":452,"context_line":"            old_path \u003d old_path_info[1].split(\u0027/\u0027)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"            if len(old_path) \u003d\u003d 3:"},{"line_number":455,"context_line":"                evs_ip \u003d old_path_info[0]"},{"line_number":456,"context_line":"                hnas_share_id \u003d old_path[2]"},{"line_number":457,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_4917a1ed","line":454,"range":{"start_line":454,"start_character":12,"end_line":454,"end_character":34},"updated":"2016-07-17 15:18:09.000000000","message":"The path could be \"IP:/shares/share_id:xxxx\", if only check the old_path length, the path(\"IP:/shares/share_id:xxxx\") seams right. \nHow about add the check of old_path_info length:\nif len(old_path) \u003d\u003d 3 and len(old_path_info) \u003d\u003d 2:","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            old_path_info \u003d share[\u0027export_locations\u0027][0][\u0027path\u0027].split(\u0027:\u0027)"},{"line_number":452,"context_line":"            old_path \u003d old_path_info[1].split(\u0027/\u0027)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"            if len(old_path) \u003d\u003d 3:"},{"line_number":455,"context_line":"                evs_ip \u003d old_path_info[0]"},{"line_number":456,"context_line":"                hnas_share_id \u003d old_path[2]"},{"line_number":457,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_e3b93b30","line":454,"range":{"start_line":454,"start_character":12,"end_line":454,"end_character":34},"in_reply_to":"dada55a8_4917a1ed","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                        \"\\\\\\\\IP\\\\share_id.\")"},{"line_number":471,"context_line":"                raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":472,"context_line":"        else:"},{"line_number":473,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol is currently supported.\")"},{"line_number":474,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        if evs_ip !\u003d self.hnas_evs_ip:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_c5788992","line":473,"range":{"start_line":473,"start_character":47,"end_line":473,"end_character":49},"updated":"2016-07-15 18:02:10.000000000","message":"s/is/are","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":470,"context_line":"                        \"\\\\\\\\IP\\\\share_id.\")"},{"line_number":471,"context_line":"                raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":472,"context_line":"        else:"},{"line_number":473,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol is currently supported.\")"},{"line_number":474,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        if evs_ip !\u003d self.hnas_evs_ip:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_4065a7df","line":473,"range":{"start_line":473,"start_character":47,"end_line":473,"end_character":49},"in_reply_to":"fad55976_c5788992","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        \"\"\"Ensure that share is exported."},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        :param share: Share that will be checked."},{"line_number":596,"context_line":"        :param hnas_share_id: If share id in hnas is provided from an"},{"line_number":597,"context_line":"         old path, it should be passed here, otherwise, it will be get from"},{"line_number":598,"context_line":"         _get_hnas_share_id function. Currently it is used only in"},{"line_number":599,"context_line":"         manage_existing."},{"line_number":600,"context_line":"        :returns: Returns a path IP:/shares/share_id for NFS or \\\\IP\\share_id"},{"line_number":601,"context_line":"            for CIFS if the export is ok."},{"line_number":602,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_4a3f8825","line":599,"range":{"start_line":596,"start_character":7,"end_line":599,"end_character":25},"updated":"2016-07-15 18:02:10.000000000","message":"please update description for a general case, not only manage","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        \"\"\"Ensure that share is exported."},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        :param share: Share that will be checked."},{"line_number":596,"context_line":"        :param hnas_share_id: If share id in hnas is provided from an"},{"line_number":597,"context_line":"         old path, it should be passed here, otherwise, it will be get from"},{"line_number":598,"context_line":"         _get_hnas_share_id function. Currently it is used only in"},{"line_number":599,"context_line":"         manage_existing."},{"line_number":600,"context_line":"        :returns: Returns a path IP:/shares/share_id for NFS or \\\\IP\\share_id"},{"line_number":601,"context_line":"            for CIFS if the export is ok."},{"line_number":602,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_805f9f0d","line":599,"range":{"start_line":596,"start_character":7,"end_line":599,"end_character":25},"in_reply_to":"fad55976_4a3f8825","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        :returns: Returns a path IP:/shares/share_id for NFS or \\\\IP\\share_id"},{"line_number":601,"context_line":"            for CIFS if the export is ok."},{"line_number":602,"context_line":"        \"\"\""},{"line_number":603,"context_line":"        if not hnas_share_id:"},{"line_number":604,"context_line":"            hnas_share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        path \u003d os.path.join(\u0027/shares\u0027, hnas_share_id)"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_ea10fcaa","line":604,"range":{"start_line":603,"start_character":7,"end_line":604,"end_character":64},"updated":"2016-07-15 18:02:10.000000000","message":"can remove","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        :returns: Returns a path IP:/shares/share_id for NFS or \\\\IP\\share_id"},{"line_number":601,"context_line":"            for CIFS if the export is ok."},{"line_number":602,"context_line":"        \"\"\""},{"line_number":603,"context_line":"        if not hnas_share_id:"},{"line_number":604,"context_line":"            hnas_share_id \u003d self._get_hnas_share_id(share[\u0027id\u0027])"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        path \u003d os.path.join(\u0027/shares\u0027, hnas_share_id)"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_e09adbc4","line":604,"range":{"start_line":603,"start_character":7,"end_line":604,"end_character":64},"in_reply_to":"fad55976_ea10fcaa","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        :param share: model of share that will be extended."},{"line_number":645,"context_line":"        :param new_size: New size of share after extend operation."},{"line_number":646,"context_line":"        \"\"\""},{"line_number":647,"context_line":"        self._ensure_share(share)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        old_size \u003d share[\u0027size\u0027]"},{"line_number":650,"context_line":"        total, available_space \u003d self.hnas.get_stats()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_6ad88c1e","line":647,"range":{"start_line":647,"start_character":8,"end_line":647,"end_character":33},"updated":"2016-07-15 18:02:10.000000000","message":"s/self._ensure_share(share)/self._ensure_share(share, hnas_share_id)\n\nalso for all other places.","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        :param share: model of share that will be extended."},{"line_number":645,"context_line":"        :param new_size: New size of share after extend operation."},{"line_number":646,"context_line":"        \"\"\""},{"line_number":647,"context_line":"        self._ensure_share(share)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"        old_size \u003d share[\u0027size\u0027]"},{"line_number":650,"context_line":"        total, available_space \u003d self.hnas.get_stats()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_20a51304","line":647,"range":{"start_line":647,"start_character":8,"end_line":647,"end_character":33},"in_reply_to":"fad55976_6ad88c1e","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":717,"context_line":"        elif snapshot[\u0027share\u0027][\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":718,"context_line":"            if (self.hnas.check_cifs_in_use(hnas_share_id) and"},{"line_number":719,"context_line":"                    not self.cifs_snapshot):"},{"line_number":720,"context_line":"                msg \u003d _(\"CIFS snapshot when share is mount is disabled. \""},{"line_number":721,"context_line":"                        \"Set hds_hnas_cifs_snapshot_while_mounted as True or \""},{"line_number":722,"context_line":"                        \"unmount the share to take a snapshot.\")"},{"line_number":723,"context_line":"                raise exception.ShareBackendException(msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_e5e82d19","line":720,"range":{"start_line":720,"start_character":53,"end_line":720,"end_character":58},"updated":"2016-07-15 18:02:10.000000000","message":"s/mount/mounted","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":717,"context_line":"        elif snapshot[\u0027share\u0027][\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":718,"context_line":"            if (self.hnas.check_cifs_in_use(hnas_share_id) and"},{"line_number":719,"context_line":"                    not self.cifs_snapshot):"},{"line_number":720,"context_line":"                msg \u003d _(\"CIFS snapshot when share is mount is disabled. \""},{"line_number":721,"context_line":"                        \"Set hds_hnas_cifs_snapshot_while_mounted as True or \""},{"line_number":722,"context_line":"                        \"unmount the share to take a snapshot.\")"},{"line_number":723,"context_line":"                raise exception.ShareBackendException(msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_16b019dd","line":720,"range":{"start_line":720,"start_character":53,"end_line":720,"end_character":58},"in_reply_to":"fad55976_e5e82d19","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":718,"context_line":"            if (self.hnas.check_cifs_in_use(hnas_share_id) and"},{"line_number":719,"context_line":"                    not self.cifs_snapshot):"},{"line_number":720,"context_line":"                msg \u003d _(\"CIFS snapshot when share is mount is disabled. \""},{"line_number":721,"context_line":"                        \"Set hds_hnas_cifs_snapshot_while_mounted as True or \""},{"line_number":722,"context_line":"                        \"unmount the share to take a snapshot.\")"},{"line_number":723,"context_line":"                raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":724,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_6596fd95","line":721,"range":{"start_line":721,"start_character":66,"end_line":721,"end_character":68},"updated":"2016-07-15 18:02:10.000000000","message":"s/as/to","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":718,"context_line":"            if (self.hnas.check_cifs_in_use(hnas_share_id) and"},{"line_number":719,"context_line":"                    not self.cifs_snapshot):"},{"line_number":720,"context_line":"                msg \u003d _(\"CIFS snapshot when share is mount is disabled. \""},{"line_number":721,"context_line":"                        \"Set hds_hnas_cifs_snapshot_while_mounted as True or \""},{"line_number":722,"context_line":"                        \"unmount the share to take a snapshot.\")"},{"line_number":723,"context_line":"                raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":724,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_56ca9150","line":721,"range":{"start_line":721,"start_character":66,"end_line":721,"end_character":68},"in_reply_to":"fad55976_6596fd95","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":731,"context_line":"                            \"directory.\"))"},{"line_number":732,"context_line":"            self.hnas.create_directory(dest_path)"},{"line_number":733,"context_line":"        finally:"},{"line_number":734,"context_line":"            if snapshot[\u0027share\u0027][\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":735,"context_line":"                self.hnas.update_access_rule(hnas_share_id, saved_list)"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"    def _delete_snapshot(self, hnas_share_id, snapshot_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_2541a50c","line":734,"range":{"start_line":734,"start_character":23,"end_line":734,"end_character":32},"updated":"2016-07-15 18:02:10.000000000","message":"remove this, you can get the share_proto from the snapshot model","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        except exception.HNASNothingToCloneException:"},{"line_number":779,"context_line":"            LOG.warning(_LW(\"Source directory is empty, exporting \""},{"line_number":780,"context_line":"                            \"directory.\"))"},{"line_number":781,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":782,"context_line":"            self.hnas.nfs_export_add(share[\u0027id\u0027])"},{"line_number":783,"context_line":"            uri \u003d self.hnas_evs_ip + \":\" + dest_path"},{"line_number":784,"context_line":"        else:"},{"line_number":785,"context_line":"            self.hnas.cifs_share_add(share[\u0027id\u0027])"},{"line_number":786,"context_line":"            uri \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + share[\u0027id\u0027]"},{"line_number":787,"context_line":"        return uri"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_aacba41d","line":787,"range":{"start_line":781,"start_character":7,"end_line":787,"end_character":18},"updated":"2016-07-15 18:02:10.000000000","message":"possibly a bug here. Maybe you should enclose this in a try-catch block and delete the volume if you coul not create the export. Similar to what you do in create_share.\n\nPlease submit a separate patch to address this, since this fix would be unrelated to the goal of this commit.","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":778,"context_line":"        except exception.HNASNothingToCloneException:"},{"line_number":779,"context_line":"            LOG.warning(_LW(\"Source directory is empty, exporting \""},{"line_number":780,"context_line":"                            \"directory.\"))"},{"line_number":781,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":782,"context_line":"            self.hnas.nfs_export_add(share[\u0027id\u0027])"},{"line_number":783,"context_line":"            uri \u003d self.hnas_evs_ip + \":\" + dest_path"},{"line_number":784,"context_line":"        else:"},{"line_number":785,"context_line":"            self.hnas.cifs_share_add(share[\u0027id\u0027])"},{"line_number":786,"context_line":"            uri \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + share[\u0027id\u0027]"},{"line_number":787,"context_line":"        return uri"}],"source_content_type":"text/x-python","patch_set":1,"id":"fad55976_56a3b19e","line":787,"range":{"start_line":781,"start_character":7,"end_line":787,"end_character":18},"in_reply_to":"fad55976_aacba41d","updated":"2016-07-19 16:01:47.000000000","message":"Ok, I\u0027ll submit another patch to fix this.","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"554caf32a257c1097eb359cfb51eff99b2cbb522","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"            LOG.debug(\"Access denied for user/group %(user)s to share \""},{"line_number":242,"context_line":"                      \"%(share)s.\", {\u0027user\u0027: rule[\u0027access_to\u0027],"},{"line_number":243,"context_line":"                                     \u0027share\u0027: hnas_share_id})"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def _clean_access_list(self, hnas_share_id):"},{"line_number":246,"context_line":"        permission_list \u003d self.hnas.list_cifs_permissions(hnas_share_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_ce68388a","line":243,"range":{"start_line":243,"start_character":46,"end_line":243,"end_character":59},"updated":"2016-07-20 03:44:37.000000000","message":"Here print out hnas_share_id, but at _cifs_allow_access above is share[\u0027id\u0027] printed, suggest making these share id info matching in both logs.","commit_id":"023bcc36724fce02ed5f2e6e609fe47e0f62ad0a"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"554caf32a257c1097eb359cfb51eff99b2cbb522","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                      \"%(share)s.\", {\u0027user\u0027: rule[\u0027access_to\u0027],"},{"line_number":243,"context_line":"                                     \u0027share\u0027: hnas_share_id})"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def _clean_access_list(self, hnas_share_id):"},{"line_number":246,"context_line":"        permission_list \u003d self.hnas.list_cifs_permissions(hnas_share_id)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        if permission_list:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_09036a0e","line":245,"range":{"start_line":245,"start_character":8,"end_line":245,"end_character":26},"updated":"2016-07-20 03:44:37.000000000","message":"Define this method name more precisely, cause it\u0027s only used for clean cifs permissions, maybe _clean_cifs_access_list","commit_id":"023bcc36724fce02ed5f2e6e609fe47e0f62ad0a"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"554caf32a257c1097eb359cfb51eff99b2cbb522","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        permission_list \u003d self.hnas.list_cifs_permissions(hnas_share_id)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        if permission_list:"},{"line_number":249,"context_line":"            for i in range(len(permission_list)):"},{"line_number":250,"context_line":"                user \u003d permission_list[i][0]"},{"line_number":251,"context_line":"                formatted_user \u003d r\u0027\"\\{1}{0}\\{1}\"\u0027.format(user, \u0027\"\u0027)"},{"line_number":252,"context_line":"                self.hnas.cifs_deny_access(hnas_share_id, formatted_user)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_ee309c03","line":249,"updated":"2016-07-20 03:44:37.000000000","message":"permission_list is a list, could directly use \"for i in permission_list:\"","commit_id":"023bcc36724fce02ed5f2e6e609fe47e0f62ad0a"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"69f1ad811c0f3c9eafc6577cbc1aa8150cc91142","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    \"\"\"Manila HNAS Driver implementation."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    1.0.0 - Initial Version."},{"line_number":80,"context_line":"    2.0.0 - Refactoring, bugfixes, implemented Share Shrink and Update Access."},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_7b9ed4b9","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":9},"updated":"2016-07-21 13:42:37.000000000","message":"this should change to 3.0.0","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"002c6af440137f099471a2e80a5023d33579b714","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    \"\"\"Manila HNAS Driver implementation."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    1.0.0 - Initial Version."},{"line_number":80,"context_line":"    2.0.0 - Refactoring, bugfixes, implemented Share Shrink and Update Access."},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_6e63b042","line":80,"range":{"start_line":80,"start_character":4,"end_line":80,"end_character":9},"in_reply_to":"dada55a8_7b9ed4b9","updated":"2016-07-21 16:00:59.000000000","message":"Done :p","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"f9428f3881b3c2a7b612cbede5c10b38313d9a83","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            raise exception.ShareResourceNotFound(share_id\u003dshare[\u0027id\u0027])"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":169,"context_line":"            self._nfs_update_access(share, hnas_share_id, access_rules)"},{"line_number":170,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":171,"context_line":"            if add_rules:"},{"line_number":172,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_cadc5f48","line":169,"range":{"start_line":169,"start_character":12,"end_line":169,"end_character":71},"updated":"2016-07-21 08:36:34.000000000","message":"Why the delete_rules and add_rules are not need to check in nfs_update_access, and only checked in cifs update access(code line 170-178)?","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"002c6af440137f099471a2e80a5023d33579b714","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            raise exception.ShareResourceNotFound(share_id\u003dshare[\u0027id\u0027])"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":169,"context_line":"            self._nfs_update_access(share, hnas_share_id, access_rules)"},{"line_number":170,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":171,"context_line":"            if add_rules:"},{"line_number":172,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_f5993a7a","line":169,"range":{"start_line":169,"start_character":12,"end_line":169,"end_character":71},"in_reply_to":"dada55a8_cadc5f48","updated":"2016-07-21 16:00:59.000000000","message":"Because access_rules already contains all rules for given share. For IPs, our backend has an operation to update the whole access list with one command, so add_rules and delete_rules are not necessary. In CIFS case that is USERs, we have to add/delete a user individually.","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"f9d38064bf3a9bb776a1739521d1aa9c31497537","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def _cifs_deny_access(self, share, hnas_share_id, delete_rules):"},{"line_number":231,"context_line":"        for rule in delete_rules:"},{"line_number":232,"context_line":"            if rule[\u0027access_type\u0027].lower() !\u003d \u0027user\u0027:"},{"line_number":233,"context_line":"                LOG.warning(_LW(\u0027Only USER access type is allowed for \u0027"},{"line_number":234,"context_line":"                            \u0027CIFS shares.\u0027))"},{"line_number":235,"context_line":"                continue"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            formatted_user \u003d rule[\u0027access_to\u0027].replace(\u0027\\\\\u0027, \u0027\\\\\\\\\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_bb37bf4b","line":234,"range":{"start_line":233,"start_character":0,"end_line":234,"end_character":44},"updated":"2016-07-21 09:00:15.000000000","message":"This warning message does not seem to be very helpful as it says nothing about what exactly has happened. I suggest adding share id and rule to the message.","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"002c6af440137f099471a2e80a5023d33579b714","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def _cifs_deny_access(self, share, hnas_share_id, delete_rules):"},{"line_number":231,"context_line":"        for rule in delete_rules:"},{"line_number":232,"context_line":"            if rule[\u0027access_type\u0027].lower() !\u003d \u0027user\u0027:"},{"line_number":233,"context_line":"                LOG.warning(_LW(\u0027Only USER access type is allowed for \u0027"},{"line_number":234,"context_line":"                            \u0027CIFS shares.\u0027))"},{"line_number":235,"context_line":"                continue"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            formatted_user \u003d rule[\u0027access_to\u0027].replace(\u0027\\\\\u0027, \u0027\\\\\\\\\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_528bfc1e","line":234,"range":{"start_line":233,"start_character":0,"end_line":234,"end_character":44},"in_reply_to":"dada55a8_bb37bf4b","updated":"2016-07-21 16:00:59.000000000","message":"Done","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"f9428f3881b3c2a7b612cbede5c10b38313d9a83","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":620,"context_line":"            self.hnas.check_export(hnas_share_id)"},{"line_number":621,"context_line":"            export \u003d self.hnas_evs_ip + \":\" + path"},{"line_number":622,"context_line":"        else:"},{"line_number":623,"context_line":"            self.hnas.check_cifs(hnas_share_id)"},{"line_number":624,"context_line":"            export \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + hnas_share_id"},{"line_number":625,"context_line":"        return export"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_f0db167a","line":622,"range":{"start_line":622,"start_character":8,"end_line":622,"end_character":13},"updated":"2016-07-21 08:36:34.000000000","message":"Better change to the following code, because the third protocols already exist in share protocol. such as: CephFS, HDFS.\n\"\"\"\"\"\"\"\"\"\"\"\"\nelif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:\n   ....\nelse:\n   ....\n\n\"\"\"\"\"\"\"","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"002c6af440137f099471a2e80a5023d33579b714","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":620,"context_line":"            self.hnas.check_export(hnas_share_id)"},{"line_number":621,"context_line":"            export \u003d self.hnas_evs_ip + \":\" + path"},{"line_number":622,"context_line":"        else:"},{"line_number":623,"context_line":"            self.hnas.check_cifs(hnas_share_id)"},{"line_number":624,"context_line":"            export \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + hnas_share_id"},{"line_number":625,"context_line":"        return export"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_547c8db4","line":622,"range":{"start_line":622,"start_character":8,"end_line":622,"end_character":13},"in_reply_to":"dada55a8_f0db167a","updated":"2016-07-21 16:00:59.000000000","message":"Done","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"f9d38064bf3a9bb776a1739521d1aa9c31497537","unresolved":false,"context_lines":[{"line_number":700,"context_line":""},{"line_number":701,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":702,"context_line":"            path \u003d self.hnas_evs_ip + os.path.join(\u0027:/shares\u0027, hnas_share_id)"},{"line_number":703,"context_line":"        else:"},{"line_number":704,"context_line":"            path \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + hnas_share_id"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"        return {\u0027size\u0027: share_size, \u0027export_locations\u0027: [path]}"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_1617c248","line":703,"range":{"start_line":703,"start_character":8,"end_line":703,"end_character":13},"updated":"2016-07-21 09:00:15.000000000","message":"What if someone supplies a share with CephFS?","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"002c6af440137f099471a2e80a5023d33579b714","unresolved":false,"context_lines":[{"line_number":700,"context_line":""},{"line_number":701,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":702,"context_line":"            path \u003d self.hnas_evs_ip + os.path.join(\u0027:/shares\u0027, hnas_share_id)"},{"line_number":703,"context_line":"        else:"},{"line_number":704,"context_line":"            path \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + hnas_share_id"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"        return {\u0027size\u0027: share_size, \u0027export_locations\u0027: [path]}"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_6f70d7a4","line":703,"range":{"start_line":703,"start_character":8,"end_line":703,"end_character":13},"in_reply_to":"dada55a8_1617c248","updated":"2016-07-21 16:00:59.000000000","message":"This condition is tested in manage_existing function (lines 456-486). Here, I am checking the protocol to build the path.","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"f9428f3881b3c2a7b612cbede5c10b38313d9a83","unresolved":false,"context_lines":[{"line_number":727,"context_line":"                msg \u003d _(\"CIFS snapshot when share is mounted is disabled. \""},{"line_number":728,"context_line":"                        \"Set hds_hnas_cifs_snapshot_while_mounted to True or \""},{"line_number":729,"context_line":"                        \"unmount the share to take a snapshot.\")"},{"line_number":730,"context_line":"                raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"        src_path \u003d os.path.join(\u0027/shares\u0027, hnas_share_id)"},{"line_number":733,"context_line":"        dest_path \u003d os.path.join(\u0027/snapshots\u0027, hnas_share_id, snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_d0409209","line":730,"range":{"start_line":730,"start_character":8,"end_line":730,"end_character":13},"updated":"2016-07-21 08:36:34.000000000","message":"How about else?","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"002c6af440137f099471a2e80a5023d33579b714","unresolved":false,"context_lines":[{"line_number":727,"context_line":"                msg \u003d _(\"CIFS snapshot when share is mounted is disabled. \""},{"line_number":728,"context_line":"                        \"Set hds_hnas_cifs_snapshot_while_mounted to True or \""},{"line_number":729,"context_line":"                        \"unmount the share to take a snapshot.\")"},{"line_number":730,"context_line":"                raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"        src_path \u003d os.path.join(\u0027/shares\u0027, hnas_share_id)"},{"line_number":733,"context_line":"        dest_path \u003d os.path.join(\u0027/snapshots\u0027, hnas_share_id, snapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_8f0eebe2","line":730,"range":{"start_line":730,"start_character":8,"end_line":730,"end_character":13},"in_reply_to":"dada55a8_d0409209","updated":"2016-07-21 16:00:59.000000000","message":"Done","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"f9428f3881b3c2a7b612cbede5c10b38313d9a83","unresolved":false,"context_lines":[{"line_number":788,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":789,"context_line":"            self.hnas.nfs_export_add(share[\u0027id\u0027])"},{"line_number":790,"context_line":"            uri \u003d self.hnas_evs_ip + \":\" + dest_path"},{"line_number":791,"context_line":"        else:"},{"line_number":792,"context_line":"            self.hnas.cifs_share_add(share[\u0027id\u0027])"},{"line_number":793,"context_line":"            uri \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + share[\u0027id\u0027]"},{"line_number":794,"context_line":"        return uri"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_b084fe0a","line":791,"range":{"start_line":791,"start_character":8,"end_line":791,"end_character":13},"updated":"2016-07-21 08:36:34.000000000","message":"above\n\nPlease, Add the unit test about create_share_from_snapshot_with_invalid_share_protocol. thanks.","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"002c6af440137f099471a2e80a5023d33579b714","unresolved":false,"context_lines":[{"line_number":788,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":789,"context_line":"            self.hnas.nfs_export_add(share[\u0027id\u0027])"},{"line_number":790,"context_line":"            uri \u003d self.hnas_evs_ip + \":\" + dest_path"},{"line_number":791,"context_line":"        else:"},{"line_number":792,"context_line":"            self.hnas.cifs_share_add(share[\u0027id\u0027])"},{"line_number":793,"context_line":"            uri \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + share[\u0027id\u0027]"},{"line_number":794,"context_line":"        return uri"}],"source_content_type":"text/x-python","patch_set":4,"id":"dada55a8_2fa7ffbd","line":791,"range":{"start_line":791,"start_character":8,"end_line":791,"end_character":13},"in_reply_to":"dada55a8_b084fe0a","updated":"2016-07-21 16:00:59.000000000","message":"Done","commit_id":"0559027d35db284289571a7cd00e8709b4185526"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9c3068253d8815c71060e9c7dd423f576993e8e3","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        LOG.debug(\"Creating share in HNAS: %(shr)s.\","},{"line_number":279,"context_line":"                  {\u0027shr\u0027: share[\u0027id\u0027]})"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if (share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027 and"},{"line_number":282,"context_line":"                share[\u0027share_proto\u0027].lower() !\u003d \u0027cifs\u0027):"},{"line_number":283,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""},{"line_number":284,"context_line":"                    \"Share provided %(share)s with protocol \""},{"line_number":285,"context_line":"                    \"%(proto)s.\") % {\u0027share\u0027: share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_bcbf705f","line":282,"range":{"start_line":281,"start_character":8,"end_line":282,"end_character":56},"updated":"2016-07-22 11:36:43.000000000","message":"if share[\u0027share_proto\u0027].lower() not in (\"nfs\", \"cifs\"):","commit_id":"3afa0d7bd87d2358dcbbdf141494a42992db598c"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9c3068253d8815c71060e9c7dd423f576993e8e3","unresolved":false,"context_lines":[{"line_number":631,"context_line":"            for CIFS if the export is ok."},{"line_number":632,"context_line":"        \"\"\""},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"        if (share[\u0027share_proto\u0027].lower() !\u003d \u0027nfs\u0027 and"},{"line_number":635,"context_line":"                share[\u0027share_proto\u0027].lower() !\u003d \u0027cifs\u0027):"},{"line_number":636,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""},{"line_number":637,"context_line":"                    \"Share provided %(share)s with protocol \""},{"line_number":638,"context_line":"                    \"%(proto)s.\") % {\u0027share\u0027: share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_5739efd7","line":635,"range":{"start_line":634,"start_character":8,"end_line":635,"end_character":56},"updated":"2016-07-22 11:36:43.000000000","message":"Same here.","commit_id":"3afa0d7bd87d2358dcbbdf141494a42992db598c"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    cfg.StrOpt(\u0027hds_hnas_driver_helper\u0027,"},{"line_number":62,"context_line":"               default\u003d\u0027manila.share.drivers.hitachi.ssh.HNASSSHBackend\u0027,"},{"line_number":63,"context_line":"               help\u003d\"Python class to be used for driver helper.\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027hds_hnas_cifs_snapshot_while_mounted\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\"By default, snapshots are not allowed to be taken when \""},{"line_number":67,"context_line":"                     \"the share has clients connected because consistent \""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_ddb4e7d2","line":64,"range":{"start_line":64,"start_character":17,"end_line":64,"end_character":53},"updated":"2016-07-27 16:23:00.000000000","message":"Maybe change this to hds_hnas_allow_cifs_snapshot_while_mounted?","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    cfg.StrOpt(\u0027hds_hnas_driver_helper\u0027,"},{"line_number":62,"context_line":"               default\u003d\u0027manila.share.drivers.hitachi.ssh.HNASSSHBackend\u0027,"},{"line_number":63,"context_line":"               help\u003d\"Python class to be used for driver helper.\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027hds_hnas_cifs_snapshot_while_mounted\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\"By default, snapshots are not allowed to be taken when \""},{"line_number":67,"context_line":"                     \"the share has clients connected because consistent \""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_6573a14e","line":64,"range":{"start_line":64,"start_character":17,"end_line":64,"end_character":53},"in_reply_to":"bacf61ea_ddb4e7d2","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               help\u003d\"Python class to be used for driver helper.\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027hds_hnas_cifs_snapshot_while_mounted\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\"By default, snapshots are not allowed to be taken when \""},{"line_number":67,"context_line":"                     \"the share has clients connected because consistent \""},{"line_number":68,"context_line":"                     \"point-in-time replica cannot be guaranteed for all \""},{"line_number":69,"context_line":"                     \"files. Enable this option to allow so.\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_dd398743","line":66,"range":{"start_line":66,"start_character":34,"end_line":66,"end_character":43},"updated":"2016-07-27 16:23:00.000000000","message":"CIFS snapshots","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               help\u003d\"Python class to be used for driver helper.\"),"},{"line_number":64,"context_line":"    cfg.BoolOpt(\u0027hds_hnas_cifs_snapshot_while_mounted\u0027,"},{"line_number":65,"context_line":"                default\u003dFalse,"},{"line_number":66,"context_line":"                help\u003d\"By default, snapshots are not allowed to be taken when \""},{"line_number":67,"context_line":"                     \"the share has clients connected because consistent \""},{"line_number":68,"context_line":"                     \"point-in-time replica cannot be guaranteed for all \""},{"line_number":69,"context_line":"                     \"files. Enable this option to allow so.\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_a593d94e","line":66,"range":{"start_line":66,"start_character":34,"end_line":66,"end_character":43},"in_reply_to":"bacf61ea_dd398743","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                help\u003d\"By default, snapshots are not allowed to be taken when \""},{"line_number":67,"context_line":"                     \"the share has clients connected because consistent \""},{"line_number":68,"context_line":"                     \"point-in-time replica cannot be guaranteed for all \""},{"line_number":69,"context_line":"                     \"files. Enable this option to allow so.\"),"},{"line_number":70,"context_line":"]"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_32f60dd8","line":69,"range":{"start_line":69,"start_character":29,"end_line":69,"end_character":60},"updated":"2016-07-27 16:23:00.000000000","message":"Please add a warning stating that enabling this might cause inconsistent snapshots on CIFS shares..","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                help\u003d\"By default, snapshots are not allowed to be taken when \""},{"line_number":67,"context_line":"                     \"the share has clients connected because consistent \""},{"line_number":68,"context_line":"                     \"point-in-time replica cannot be guaranteed for all \""},{"line_number":69,"context_line":"                     \"files. Enable this option to allow so.\"),"},{"line_number":70,"context_line":"]"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_3356e1d2","line":69,"range":{"start_line":69,"start_character":29,"end_line":69,"end_character":60},"in_reply_to":"bacf61ea_32f60dd8","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":170,"context_line":"            self._nfs_update_access(share, hnas_share_id, access_rules)"},{"line_number":171,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":172,"context_line":"            if add_rules:"},{"line_number":173,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"},{"line_number":174,"context_line":"            if delete_rules:"},{"line_number":175,"context_line":"                self._cifs_deny_access(share, hnas_share_id, delete_rules)"},{"line_number":176,"context_line":"            if not (add_rules or delete_rules):"},{"line_number":177,"context_line":"                # recovery mode"},{"line_number":178,"context_line":"                self._clean_cifs_access_list(hnas_share_id)"},{"line_number":179,"context_line":"                self._cifs_allow_access(share, hnas_share_id, access_rules)"},{"line_number":180,"context_line":"        else:"},{"line_number":181,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""},{"line_number":182,"context_line":"                    \"Share provided %(share)s with protocol \""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_8255eec7","line":179,"range":{"start_line":172,"start_character":0,"end_line":179,"end_character":75},"updated":"2016-07-27 16:23:00.000000000","message":"Please change it to a single if/else clause. No need to verify if the lists are empty.\n\n    if not (add_rules or delete_rules):\n        # recovery mode\n        self._clean_cifs_access_list(hnas_share_id)\n        self._cifs_allow_access(share, hnas_share_id, access_rules)\n    else:\n        self._cifs_allow_access(share, hnas_share_id, add_rules)\n        self._cifs_deny_access(share, hnas_share_id, delete_rules)","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        if share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027nfs\u0027:"},{"line_number":170,"context_line":"            self._nfs_update_access(share, hnas_share_id, access_rules)"},{"line_number":171,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":172,"context_line":"            if add_rules:"},{"line_number":173,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"},{"line_number":174,"context_line":"            if delete_rules:"},{"line_number":175,"context_line":"                self._cifs_deny_access(share, hnas_share_id, delete_rules)"},{"line_number":176,"context_line":"            if not (add_rules or delete_rules):"},{"line_number":177,"context_line":"                # recovery mode"},{"line_number":178,"context_line":"                self._clean_cifs_access_list(hnas_share_id)"},{"line_number":179,"context_line":"                self._cifs_allow_access(share, hnas_share_id, access_rules)"},{"line_number":180,"context_line":"        else:"},{"line_number":181,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""},{"line_number":182,"context_line":"                    \"Share provided %(share)s with protocol \""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_2551a963","line":179,"range":{"start_line":172,"start_character":0,"end_line":179,"end_character":75},"in_reply_to":"bacf61ea_8255eec7","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    def _clean_cifs_access_list(self, hnas_share_id):"},{"line_number":259,"context_line":"        permission_list \u003d self.hnas.list_cifs_permissions(hnas_share_id)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        if permission_list:"},{"line_number":262,"context_line":"            for permission in permission_list:"},{"line_number":263,"context_line":"                user \u003d permission[0]"},{"line_number":264,"context_line":"                formatted_user \u003d r\u0027\"\\{1}{0}\\{1}\"\u0027.format(user, \u0027\"\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_6246fac0","line":261,"range":{"start_line":261,"start_character":8,"end_line":261,"end_character":27},"updated":"2016-07-27 16:23:00.000000000","message":"Not needed. If hnas.list_cifs_permissions returns an empty list, for will take care of this verification for you.","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    def _clean_cifs_access_list(self, hnas_share_id):"},{"line_number":259,"context_line":"        permission_list \u003d self.hnas.list_cifs_permissions(hnas_share_id)"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        if permission_list:"},{"line_number":262,"context_line":"            for permission in permission_list:"},{"line_number":263,"context_line":"                user \u003d permission[0]"},{"line_number":264,"context_line":"                formatted_user \u003d r\u0027\"\\{1}{0}\\{1}\"\u0027.format(user, \u0027\"\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_a54e3994","line":261,"range":{"start_line":261,"start_character":8,"end_line":261,"end_character":27},"in_reply_to":"bacf61ea_6246fac0","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            \u0027share_backend_name\u0027: self.backend_name,"},{"line_number":439,"context_line":"            \u0027driver_handles_share_servers\u0027: self.driver_handles_share_servers,"},{"line_number":440,"context_line":"            \u0027vendor_name\u0027: \u0027HDS\u0027,"},{"line_number":441,"context_line":"            \u0027driver_version\u0027: \u00272.0.0\u0027,"},{"line_number":442,"context_line":"            \u0027storage_protocol\u0027: \u0027NFS_CIFS\u0027,"},{"line_number":443,"context_line":"            \u0027total_capacity_gb\u0027: total_space,"},{"line_number":444,"context_line":"            \u0027free_capacity_gb\u0027: free_space,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_d2d21134","line":441,"range":{"start_line":441,"start_character":30,"end_line":441,"end_character":37},"updated":"2016-07-27 16:23:00.000000000","message":"This should be changed to 3.0.0.","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            \u0027share_backend_name\u0027: self.backend_name,"},{"line_number":439,"context_line":"            \u0027driver_handles_share_servers\u0027: self.driver_handles_share_servers,"},{"line_number":440,"context_line":"            \u0027vendor_name\u0027: \u0027HDS\u0027,"},{"line_number":441,"context_line":"            \u0027driver_version\u0027: \u00272.0.0\u0027,"},{"line_number":442,"context_line":"            \u0027storage_protocol\u0027: \u0027NFS_CIFS\u0027,"},{"line_number":443,"context_line":"            \u0027total_capacity_gb\u0027: total_space,"},{"line_number":444,"context_line":"            \u0027free_capacity_gb\u0027: free_space,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_685ff80e","line":441,"range":{"start_line":441,"start_character":30,"end_line":441,"end_character":37},"in_reply_to":"bacf61ea_d2d21134","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4b1f8d8d35c2e075b7f7ac802ab1768faa59b72a","unresolved":false,"context_lines":[{"line_number":699,"context_line":"        It uses tree-delete-job-submit to format and delete virtual-volumes."},{"line_number":700,"context_line":"        Quota is deleted with virtual-volume."},{"line_number":701,"context_line":"        :param hnas_share_id: HNAS ID of share that will be deleted."},{"line_number":702,"context_line":"        :param share_proto: Share protocol that will be deleted."},{"line_number":703,"context_line":"        \"\"\""},{"line_number":704,"context_line":"        self._check_fs_mounted()"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_7e6b67f1","line":702,"range":{"start_line":702,"start_character":28,"end_line":702,"end_character":63},"updated":"2016-07-27 12:43:45.000000000","message":"Protocol of share that will be deleted.","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":699,"context_line":"        It uses tree-delete-job-submit to format and delete virtual-volumes."},{"line_number":700,"context_line":"        Quota is deleted with virtual-volume."},{"line_number":701,"context_line":"        :param hnas_share_id: HNAS ID of share that will be deleted."},{"line_number":702,"context_line":"        :param share_proto: Share protocol that will be deleted."},{"line_number":703,"context_line":"        \"\"\""},{"line_number":704,"context_line":"        self._check_fs_mounted()"},{"line_number":705,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_087c7c71","line":702,"range":{"start_line":702,"start_character":28,"end_line":702,"end_character":63},"in_reply_to":"dada55a8_7e6b67f1","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"47c3728762a80620d8dc24720cbe2cc5327341ba","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                self._clean_cifs_access_list(hnas_share_id)"},{"line_number":176,"context_line":"                self._cifs_allow_access(share, hnas_share_id, access_rules)"},{"line_number":177,"context_line":"            else:"},{"line_number":178,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"},{"line_number":179,"context_line":"                self._cifs_deny_access(share, hnas_share_id, delete_rules)"},{"line_number":180,"context_line":"        else:"},{"line_number":181,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_c8d05d56","line":178,"range":{"start_line":178,"start_character":16,"end_line":178,"end_character":72},"updated":"2016-07-28 19:30:43.000000000","message":"deny should come first, if you are removing a \u0027ro\u0027 rule and adding the same \u0027rw\u0027, it would fail if allow is first","commit_id":"4caf3a77e07f2e98c80f7c213145ddc811280e84"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"a5167f0b89aaaefb349e49c602207e759903b4ca","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                self._clean_cifs_access_list(hnas_share_id)"},{"line_number":176,"context_line":"                self._cifs_allow_access(share, hnas_share_id, access_rules)"},{"line_number":177,"context_line":"            else:"},{"line_number":178,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"},{"line_number":179,"context_line":"                self._cifs_deny_access(share, hnas_share_id, delete_rules)"},{"line_number":180,"context_line":"        else:"},{"line_number":181,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_b6e9061d","line":178,"range":{"start_line":178,"start_character":16,"end_line":178,"end_character":72},"in_reply_to":"bacf61ea_0bff0f68","updated":"2016-07-28 20:55:52.000000000","message":"Done","commit_id":"4caf3a77e07f2e98c80f7c213145ddc811280e84"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0939ed3dcbcec9cc6fd203809bb565288390a5f0","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                self._clean_cifs_access_list(hnas_share_id)"},{"line_number":176,"context_line":"                self._cifs_allow_access(share, hnas_share_id, access_rules)"},{"line_number":177,"context_line":"            else:"},{"line_number":178,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"},{"line_number":179,"context_line":"                self._cifs_deny_access(share, hnas_share_id, delete_rules)"},{"line_number":180,"context_line":"        else:"},{"line_number":181,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_0bff0f68","line":178,"range":{"start_line":178,"start_character":16,"end_line":178,"end_character":72},"in_reply_to":"bacf61ea_c8d05d56","updated":"2016-07-28 20:16:21.000000000","message":"+1 nice catch","commit_id":"4caf3a77e07f2e98c80f7c213145ddc811280e84"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0939ed3dcbcec9cc6fd203809bb565288390a5f0","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            old_path_info \u003d share[\u0027export_locations\u0027][0][\u0027path\u0027].split(\u0027:\u0027)"},{"line_number":477,"context_line":"            old_path \u003d old_path_info[1].split(\u0027/\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"            if len(old_path) \u003d\u003d 3 and len(old_path_info) \u003d\u003d 2:"},{"line_number":480,"context_line":"                evs_ip \u003d old_path_info[0]"},{"line_number":481,"context_line":"                hnas_share_id \u003d old_path[2]"},{"line_number":482,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_ab636340","line":479,"range":{"start_line":479,"start_character":33,"end_line":479,"end_character":61},"updated":"2016-07-28 20:16:21.000000000","message":"unrelated change, please remove. Please file a bug for this and fix on another patch.","commit_id":"4caf3a77e07f2e98c80f7c213145ddc811280e84"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"a5167f0b89aaaefb349e49c602207e759903b4ca","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            old_path_info \u003d share[\u0027export_locations\u0027][0][\u0027path\u0027].split(\u0027:\u0027)"},{"line_number":477,"context_line":"            old_path \u003d old_path_info[1].split(\u0027/\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"            if len(old_path) \u003d\u003d 3 and len(old_path_info) \u003d\u003d 2:"},{"line_number":480,"context_line":"                evs_ip \u003d old_path_info[0]"},{"line_number":481,"context_line":"                hnas_share_id \u003d old_path[2]"},{"line_number":482,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_b65e26e7","line":479,"range":{"start_line":479,"start_character":33,"end_line":479,"end_character":61},"in_reply_to":"bacf61ea_ab636340","updated":"2016-07-28 20:55:52.000000000","message":"okay","commit_id":"4caf3a77e07f2e98c80f7c213145ddc811280e84"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"b5e7f09ea5f2505373cd2143a2a5e1af9c1f6cd3","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":173,"context_line":"            if not (add_rules or delete_rules):"},{"line_number":174,"context_line":"                # recovery mode"},{"line_number":175,"context_line":"                self._clean_cifs_access_list(hnas_share_id)"},{"line_number":176,"context_line":"                self._cifs_allow_access(share, hnas_share_id, access_rules)"},{"line_number":177,"context_line":"            else:"},{"line_number":178,"context_line":"                self._cifs_deny_access(share, hnas_share_id, delete_rules)"},{"line_number":179,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_18782df2","line":176,"range":{"start_line":175,"start_character":0,"end_line":176,"end_character":75},"updated":"2016-08-08 21:52:47.000000000","message":"Will this sequence cause a brief interruption of access?  Or will mounted shares retain I/O capability while you remove and re-allow access?","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"e2e92a0bf318ff86f337425629b2e3c3dbfd99ee","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":173,"context_line":"            if not (add_rules or delete_rules):"},{"line_number":174,"context_line":"                # recovery mode"},{"line_number":175,"context_line":"                self._clean_cifs_access_list(hnas_share_id)"},{"line_number":176,"context_line":"                self._cifs_allow_access(share, hnas_share_id, access_rules)"},{"line_number":177,"context_line":"            else:"},{"line_number":178,"context_line":"                self._cifs_deny_access(share, hnas_share_id, delete_rules)"},{"line_number":179,"context_line":"                self._cifs_allow_access(share, hnas_share_id, add_rules)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_1ebab96e","line":176,"range":{"start_line":175,"start_character":0,"end_line":176,"end_character":75},"in_reply_to":"9ad45d7e_18782df2","updated":"2016-08-09 13:14:33.000000000","message":"Mounted shares will not be interrupted during the recovery mode, so I/O are not affected here.","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"b5e7f09ea5f2505373cd2143a2a5e1af9c1f6cd3","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        for rule in access_rules:"},{"line_number":191,"context_line":"            if rule[\u0027access_type\u0027].lower() !\u003d \u0027ip\u0027:"},{"line_number":192,"context_line":"                msg \u003d _(\"Only IP access type currently supported for NFS.\""},{"line_number":193,"context_line":"                        \"Share provided %(share)s with rule type \""},{"line_number":194,"context_line":"                        \"%(type)s.\") % {\u0027share\u0027: share[\u0027id\u0027],"},{"line_number":195,"context_line":"                                        \u0027type\u0027: rule[\u0027access_type\u0027]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_f8f9d94e","line":192,"range":{"start_line":192,"start_character":73,"end_line":192,"end_character":74},"updated":"2016-08-08 21:52:47.000000000","message":"Need a space here.","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"e2e92a0bf318ff86f337425629b2e3c3dbfd99ee","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        for rule in access_rules:"},{"line_number":191,"context_line":"            if rule[\u0027access_type\u0027].lower() !\u003d \u0027ip\u0027:"},{"line_number":192,"context_line":"                msg \u003d _(\"Only IP access type currently supported for NFS.\""},{"line_number":193,"context_line":"                        \"Share provided %(share)s with rule type \""},{"line_number":194,"context_line":"                        \"%(type)s.\") % {\u0027share\u0027: share[\u0027id\u0027],"},{"line_number":195,"context_line":"                                        \u0027type\u0027: rule[\u0027access_type\u0027]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_be30cd02","line":192,"range":{"start_line":192,"start_character":73,"end_line":192,"end_character":74},"in_reply_to":"9ad45d7e_f8f9d94e","updated":"2016-08-09 13:14:33.000000000","message":"Done","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"97b731369004a12ad83f43ba760dd8163a2f1c57","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    def _cifs_allow_access(self, share, hnas_share_id, add_rules):"},{"line_number":215,"context_line":"        for rule in add_rules:"},{"line_number":216,"context_line":"            if rule[\u0027access_type\u0027].lower() !\u003d \u0027user\u0027:"},{"line_number":217,"context_line":"                msg \u003d _(\"Only USER access type currently supported for CIFS. \""},{"line_number":218,"context_line":"                        \"Share provided %(share)s with rule type \""},{"line_number":219,"context_line":"                        \"%(type)s.\") % {\u0027share\u0027: share[\u0027id\u0027],"},{"line_number":220,"context_line":"                                        \u0027type\u0027: rule[\u0027access_type\u0027]}"},{"line_number":221,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"            if rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RW:"}],"source_content_type":"text/x-python","patch_set":11,"id":"bacf61ea_c61745ec","line":220,"range":{"start_line":217,"start_character":24,"end_line":220,"end_character":67},"updated":"2016-08-05 12:34:33.000000000","message":"You should log the rule[\u0027id\u0027], or rule[\u0027access_to\u0027]","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"e2e92a0bf318ff86f337425629b2e3c3dbfd99ee","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    def _cifs_allow_access(self, share, hnas_share_id, add_rules):"},{"line_number":215,"context_line":"        for rule in add_rules:"},{"line_number":216,"context_line":"            if rule[\u0027access_type\u0027].lower() !\u003d \u0027user\u0027:"},{"line_number":217,"context_line":"                msg \u003d _(\"Only USER access type currently supported for CIFS. \""},{"line_number":218,"context_line":"                        \"Share provided %(share)s with rule type \""},{"line_number":219,"context_line":"                        \"%(type)s.\") % {\u0027share\u0027: share[\u0027id\u0027],"},{"line_number":220,"context_line":"                                        \u0027type\u0027: rule[\u0027access_type\u0027]}"},{"line_number":221,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"            if rule[\u0027access_level\u0027] \u003d\u003d constants.ACCESS_LEVEL_RW:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_69ab41d7","line":220,"range":{"start_line":217,"start_character":24,"end_line":220,"end_character":67},"in_reply_to":"bacf61ea_c61745ec","updated":"2016-08-09 13:14:33.000000000","message":"Done","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"b5e7f09ea5f2505373cd2143a2a5e1af9c1f6cd3","unresolved":false,"context_lines":[{"line_number":822,"context_line":"            uri \u003d self.hnas_evs_ip + \":\" + dest_path"},{"line_number":823,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":824,"context_line":"            self.hnas.cifs_share_add(share[\u0027id\u0027])"},{"line_number":825,"context_line":"            uri \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + share[\u0027id\u0027]"},{"line_number":826,"context_line":"        else:"},{"line_number":827,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""},{"line_number":828,"context_line":"                    \"Share provided %(share)s with protocol \""}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_2cd05653","line":825,"range":{"start_line":825,"start_character":18,"end_line":825,"end_character":64},"updated":"2016-08-08 21:52:47.000000000","message":"In addition to Goutham\u0027s comment below, you could also implement a helper method to build CIFS paths, since you do it in several locations.\n\nAnd you can reduce the number of backslashes by using raw strings:\n\nhttps://github.com/openstack/manila/blob/master/manila/share/drivers/netapp/dataontap/protocols/cifs_cmode.py#L39","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"e2e92a0bf318ff86f337425629b2e3c3dbfd99ee","unresolved":false,"context_lines":[{"line_number":822,"context_line":"            uri \u003d self.hnas_evs_ip + \":\" + dest_path"},{"line_number":823,"context_line":"        elif share[\u0027share_proto\u0027].lower() \u003d\u003d \u0027cifs\u0027:"},{"line_number":824,"context_line":"            self.hnas.cifs_share_add(share[\u0027id\u0027])"},{"line_number":825,"context_line":"            uri \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + share[\u0027id\u0027]"},{"line_number":826,"context_line":"        else:"},{"line_number":827,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""},{"line_number":828,"context_line":"                    \"Share provided %(share)s with protocol \""}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_0919e588","line":825,"range":{"start_line":825,"start_character":18,"end_line":825,"end_character":64},"in_reply_to":"9ad45d7e_2cd05653","updated":"2016-08-09 13:14:33.000000000","message":"Done","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"97b731369004a12ad83f43ba760dd8163a2f1c57","unresolved":false,"context_lines":[{"line_number":824,"context_line":"            self.hnas.cifs_share_add(share[\u0027id\u0027])"},{"line_number":825,"context_line":"            uri \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + share[\u0027id\u0027]"},{"line_number":826,"context_line":"        else:"},{"line_number":827,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""},{"line_number":828,"context_line":"                    \"Share provided %(share)s with protocol \""},{"line_number":829,"context_line":"                    \"%(proto)s.\") % {\u0027share\u0027: share[\u0027id\u0027],"},{"line_number":830,"context_line":"                                     \u0027proto\u0027: share[\u0027share_proto\u0027]}"},{"line_number":831,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":832,"context_line":"        return uri"}],"source_content_type":"text/x-python","patch_set":11,"id":"bacf61ea_067afdf0","line":830,"range":{"start_line":827,"start_character":11,"end_line":830,"end_character":67},"updated":"2016-08-05 12:34:33.000000000","message":"This sort of check is performed ~6 times in this file.. I recommend you implement a protocol check helper for cleanup.. \n\n  def _check_protocol(self, protocol)\n      if protocol.lower() not in (\u0027nfs\u0027, \u0027cifs\u0027):\n          msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \"\n                    \"Share provided %(share)s with protocol \"\n                    \"%(proto)s.\") % {\u0027share\u0027: share[\u0027id\u0027],\n                                     \u0027proto\u0027: share[\u0027share_proto\u0027]}\n         exception.ShareBackendException(msg\u003dmsg)","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"e2e92a0bf318ff86f337425629b2e3c3dbfd99ee","unresolved":false,"context_lines":[{"line_number":824,"context_line":"            self.hnas.cifs_share_add(share[\u0027id\u0027])"},{"line_number":825,"context_line":"            uri \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + share[\u0027id\u0027]"},{"line_number":826,"context_line":"        else:"},{"line_number":827,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""},{"line_number":828,"context_line":"                    \"Share provided %(share)s with protocol \""},{"line_number":829,"context_line":"                    \"%(proto)s.\") % {\u0027share\u0027: share[\u0027id\u0027],"},{"line_number":830,"context_line":"                                     \u0027proto\u0027: share[\u0027share_proto\u0027]}"},{"line_number":831,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":832,"context_line":"        return uri"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_d8ab141c","line":830,"range":{"start_line":827,"start_character":11,"end_line":830,"end_character":67},"in_reply_to":"9ad45d7e_acaf26e2","updated":"2016-08-09 13:14:33.000000000","message":"Done! Thanks Goutham","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"},{"author":{"_account_id":11865,"name":"Clinton Knight","email":"cknight@netapp.com","username":"cknight"},"change_message_id":"b5e7f09ea5f2505373cd2143a2a5e1af9c1f6cd3","unresolved":false,"context_lines":[{"line_number":824,"context_line":"            self.hnas.cifs_share_add(share[\u0027id\u0027])"},{"line_number":825,"context_line":"            uri \u003d \"\\\\\\\\\" + self.hnas_evs_ip + \"\\\\\" + share[\u0027id\u0027]"},{"line_number":826,"context_line":"        else:"},{"line_number":827,"context_line":"            msg \u003d _(\"Only NFS or CIFS protocol are currently supported. \""},{"line_number":828,"context_line":"                    \"Share provided %(share)s with protocol \""},{"line_number":829,"context_line":"                    \"%(proto)s.\") % {\u0027share\u0027: share[\u0027id\u0027],"},{"line_number":830,"context_line":"                                     \u0027proto\u0027: share[\u0027share_proto\u0027]}"},{"line_number":831,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"},{"line_number":832,"context_line":"        return uri"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_acaf26e2","line":830,"range":{"start_line":827,"start_character":11,"end_line":830,"end_character":67},"in_reply_to":"bacf61ea_067afdf0","updated":"2016-08-08 21:52:47.000000000","message":"+1","commit_id":"fca3ba3759128d9e1ae8a5f15368aef58aa929d8"}],"manila/share/drivers/hitachi/ssh.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9c3068253d8815c71060e9c7dd423f576993e8e3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        command \u003d [\u0027nfs-export\u0027, \u0027add\u0027, \u0027-S\u0027, \u0027disable\u0027, \u0027-c\u0027, \u0027127.0.0.1\u0027,"},{"line_number":68,"context_line":"                   path, self.fs_name, path]"},{"line_number":69,"context_line":"        self._execute(command)"},{"line_number":70,"context_line":"        return path"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def nfs_export_del(self, share_id):"},{"line_number":73,"context_line":"        path \u003d \u0027/shares/\u0027 + share_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_bc2f703d","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":19},"updated":"2016-07-22 11:36:43.000000000","message":"here you return \"path.","commit_id":"3afa0d7bd87d2358dcbbdf141494a42992db598c"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9c3068253d8815c71060e9c7dd423f576993e8e3","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        command \u003d [\u0027cifs-share\u0027, \u0027add\u0027, \u0027-S\u0027, \u0027disable\u0027, \u0027--enable-abe\u0027,"},{"line_number":89,"context_line":"                   \u0027--nodefaultsaa\u0027, share_id, self.fs_name, path]"},{"line_number":90,"context_line":"        self._execute(command)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def cifs_share_del(self, share_id):"},{"line_number":93,"context_line":"        command \u003d [\u0027cifs-share\u0027, \u0027del\u0027, \u0027--target-label\u0027, self.fs_name,"},{"line_number":94,"context_line":"                   share_id]"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_5c1f5409","line":91,"updated":"2016-07-22 11:36:43.000000000","message":"but not here, why?","commit_id":"3afa0d7bd87d2358dcbbdf141494a42992db598c"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9c3068253d8815c71060e9c7dd423f576993e8e3","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        permission_list \u003d []"},{"line_number":172,"context_line":"        user \u003d \u0027\u0027"},{"line_number":173,"context_line":"        permission \u003d \u0027\u0027"},{"line_number":174,"context_line":"        for i in range(3, len(items)):"},{"line_number":175,"context_line":"            if \u0027Allow Read\u0027 in items[i]:"},{"line_number":176,"context_line":"                permission \u003d \u0027ar\u0027"},{"line_number":177,"context_line":"                user \u003d items[i].split(\u0027Allow Read\u0027)[1:][0].strip()"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_9c9eec61","line":174,"range":{"start_line":174,"start_character":17,"end_line":174,"end_character":38},"updated":"2016-07-22 11:36:43.000000000","message":"Why values 0,1,2 are skipped?","commit_id":"3afa0d7bd87d2358dcbbdf141494a42992db598c"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9c3068253d8815c71060e9c7dd423f576993e8e3","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                                          \u0027fs\u0027: self.fs_name}"},{"line_number":388,"context_line":"                    raise exception.HNASItemNotFoundException(msg\u003dmsg)"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def check_cifs_in_use(self, vvol_name):"},{"line_number":391,"context_line":"        output \u003d self._cifs_list(vvol_name)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        lines \u003d output.split(\u0027\\n\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_9cc38c38","line":390,"range":{"start_line":390,"start_character":8,"end_line":390,"end_character":25},"updated":"2016-07-22 11:36:43.000000000","message":"based on return value better to call it \"is_cifs_in_use\"","commit_id":"3afa0d7bd87d2358dcbbdf141494a42992db598c"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                LOG.exception(msg)"},{"line_number":103,"context_line":"                raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_host_list(self, share_id):"},{"line_number":106,"context_line":"        export \u003d self._get_share_export(share_id)"},{"line_number":107,"context_line":"        return export[0].export_configuration"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_af09fadf","line":105,"range":{"start_line":105,"start_character":8,"end_line":105,"end_character":21},"updated":"2016-07-27 16:23:00.000000000","message":"Maybe rename to get_nfs_host_list?","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                LOG.exception(msg)"},{"line_number":103,"context_line":"                raise exception.HNASBackendException(msg\u003dmsg)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_host_list(self, share_id):"},{"line_number":106,"context_line":"        export \u003d self._get_share_export(share_id)"},{"line_number":107,"context_line":"        return export[0].export_configuration"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_289340a5","line":105,"range":{"start_line":105,"start_character":8,"end_line":105,"end_character":21},"in_reply_to":"bacf61ea_af09fadf","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        export \u003d self._get_share_export(share_id)"},{"line_number":107,"context_line":"        return export[0].export_configuration"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def update_access_rule(self, share_id, host_list):"},{"line_number":110,"context_line":"        command \u003d [\u0027nfs-export\u0027, \u0027mod\u0027, \u0027-c\u0027]"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if len(host_list) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_2f486a2d","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":26},"updated":"2016-07-27 16:23:00.000000000","message":"Maybe rename to nfs_update_access_rule?","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        export \u003d self._get_share_export(share_id)"},{"line_number":107,"context_line":"        return export[0].export_configuration"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def update_access_rule(self, share_id, host_list):"},{"line_number":110,"context_line":"        command \u003d [\u0027nfs-export\u0027, \u0027mod\u0027, \u0027-c\u0027]"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if len(host_list) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_63cef984","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":26},"in_reply_to":"bacf61ea_2f486a2d","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"84e365c07f437e702270f7c519129f4820f60c16","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            if \u0027No entries for this share\u0027 in e.stderr:"},{"line_number":161,"context_line":"                LOG.debug(\u0027Share %(share)s does not have any permission \u0027"},{"line_number":162,"context_line":"                          \u0027added.\u0027, {\u0027share\u0027: hnas_share_id})"},{"line_number":163,"context_line":"                return None"},{"line_number":164,"context_line":"            else:"},{"line_number":165,"context_line":"                msg \u003d six.text_type(e)"},{"line_number":166,"context_line":"                LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_32928d58","line":163,"range":{"start_line":163,"start_character":16,"end_line":163,"end_character":27},"updated":"2016-07-27 16:23:50.000000000","message":"Please change this to return an empty list so you don\u0027t need to verify it.","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            if \u0027No entries for this share\u0027 in e.stderr:"},{"line_number":161,"context_line":"                LOG.debug(\u0027Share %(share)s does not have any permission \u0027"},{"line_number":162,"context_line":"                          \u0027added.\u0027, {\u0027share\u0027: hnas_share_id})"},{"line_number":163,"context_line":"                return None"},{"line_number":164,"context_line":"            else:"},{"line_number":165,"context_line":"                msg \u003d six.text_type(e)"},{"line_number":166,"context_line":"                LOG.exception(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_43cbf572","line":163,"range":{"start_line":163,"start_character":16,"end_line":163,"end_character":27},"in_reply_to":"bacf61ea_32928d58","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        user \u003d \u0027\u0027"},{"line_number":172,"context_line":"        permission \u003d \u0027\u0027"},{"line_number":173,"context_line":"        for i in range(3, len(items)):"},{"line_number":174,"context_line":"            if \u0027Allow Read\u0027 in items[i]:"},{"line_number":175,"context_line":"                permission \u003d \u0027ar\u0027"},{"line_number":176,"context_line":"                user \u003d items[i].split(\u0027Allow Read\u0027)[1:][0].strip()"},{"line_number":177,"context_line":"            elif \u0027Allow Change \u0026 Read\u0027 in items[i]:"},{"line_number":178,"context_line":"                permission \u003d \u0027acr\u0027"},{"line_number":179,"context_line":"                user \u003d items[i].split(\u0027Allow Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":180,"context_line":"            elif \u0027Allow Full Control\u0027 in items[i]:"},{"line_number":181,"context_line":"                permission \u003d \u0027af\u0027"},{"line_number":182,"context_line":"                user \u003d items[i].split(\u0027Allow Full Control\u0027)[1:][0].strip()"},{"line_number":183,"context_line":"            elif \u0027Deny  Full Control\u0027 in items[i]:"},{"line_number":184,"context_line":"                permission \u003d \u0027df\u0027"},{"line_number":185,"context_line":"                user \u003d items[i].split(\u0027Deny  Full Control\u0027)[1:][0].strip()"},{"line_number":186,"context_line":"            elif \u0027Deny  Change \u0026 Read\u0027 in items[i]:"},{"line_number":187,"context_line":"                permission \u003d \u0027dcr\u0027"},{"line_number":188,"context_line":"                user \u003d items[i].split(\u0027Deny  Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":189,"context_line":"            elif \u0027Deny  Read\u0027 in items[i]:"},{"line_number":190,"context_line":"                permission \u003d \u0027dr\u0027"},{"line_number":191,"context_line":"                user \u003d items[i].split(\u0027Deny  Read\u0027)[1:][0].strip()"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"            if user:"},{"line_number":194,"context_line":"                permission_list.append((user, permission))"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_7231a5ec","line":191,"range":{"start_line":174,"start_character":0,"end_line":191,"end_character":66},"updated":"2016-07-27 16:23:00.000000000","message":"Shouldn\u0027t this be done in a parser class?","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        user \u003d \u0027\u0027"},{"line_number":172,"context_line":"        permission \u003d \u0027\u0027"},{"line_number":173,"context_line":"        for i in range(3, len(items)):"},{"line_number":174,"context_line":"            if \u0027Allow Read\u0027 in items[i]:"},{"line_number":175,"context_line":"                permission \u003d \u0027ar\u0027"},{"line_number":176,"context_line":"                user \u003d items[i].split(\u0027Allow Read\u0027)[1:][0].strip()"},{"line_number":177,"context_line":"            elif \u0027Allow Change \u0026 Read\u0027 in items[i]:"},{"line_number":178,"context_line":"                permission \u003d \u0027acr\u0027"},{"line_number":179,"context_line":"                user \u003d items[i].split(\u0027Allow Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":180,"context_line":"            elif \u0027Allow Full Control\u0027 in items[i]:"},{"line_number":181,"context_line":"                permission \u003d \u0027af\u0027"},{"line_number":182,"context_line":"                user \u003d items[i].split(\u0027Allow Full Control\u0027)[1:][0].strip()"},{"line_number":183,"context_line":"            elif \u0027Deny  Full Control\u0027 in items[i]:"},{"line_number":184,"context_line":"                permission \u003d \u0027df\u0027"},{"line_number":185,"context_line":"                user \u003d items[i].split(\u0027Deny  Full Control\u0027)[1:][0].strip()"},{"line_number":186,"context_line":"            elif \u0027Deny  Change \u0026 Read\u0027 in items[i]:"},{"line_number":187,"context_line":"                permission \u003d \u0027dcr\u0027"},{"line_number":188,"context_line":"                user \u003d items[i].split(\u0027Deny  Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":189,"context_line":"            elif \u0027Deny  Read\u0027 in items[i]:"},{"line_number":190,"context_line":"                permission \u003d \u0027dr\u0027"},{"line_number":191,"context_line":"                user \u003d items[i].split(\u0027Deny  Read\u0027)[1:][0].strip()"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"            if user:"},{"line_number":194,"context_line":"                permission_list.append((user, permission))"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_1d1155ad","line":191,"range":{"start_line":174,"start_character":0,"end_line":191,"end_character":66},"in_reply_to":"bacf61ea_7231a5ec","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        lines \u003d output.split(\u0027\\n\u0027)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        for line in lines:"},{"line_number":380,"context_line":"            if \u0027File system label\u0027 in line:"},{"line_number":381,"context_line":"                fs \u003d line.split(\u0027: \u0027)"},{"line_number":382,"context_line":"                if self.fs_name !\u003d fs[1]:"},{"line_number":383,"context_line":"                    msg \u003d _(\"CIFS share %(share)s is not located in \""},{"line_number":384,"context_line":"                            \"configured filesystem \""},{"line_number":385,"context_line":"                            \"%(fs)s.\") % {\u0027share\u0027: vvol_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_f22475b0","line":382,"range":{"start_line":379,"start_character":0,"end_line":382,"end_character":41},"updated":"2016-07-27 16:23:00.000000000","message":"Shouldn\u0027t this be done in a parser class?","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        lines \u003d output.split(\u0027\\n\u0027)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        for line in lines:"},{"line_number":380,"context_line":"            if \u0027File system label\u0027 in line:"},{"line_number":381,"context_line":"                fs \u003d line.split(\u0027: \u0027)"},{"line_number":382,"context_line":"                if self.fs_name !\u003d fs[1]:"},{"line_number":383,"context_line":"                    msg \u003d _(\"CIFS share %(share)s is not located in \""},{"line_number":384,"context_line":"                            \"configured filesystem \""},{"line_number":385,"context_line":"                            \"%(fs)s.\") % {\u0027share\u0027: vvol_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_207fa9ab","line":382,"range":{"start_line":379,"start_character":0,"end_line":382,"end_character":41},"in_reply_to":"bacf61ea_f22475b0","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        lines \u003d output.split(\u0027\\n\u0027)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        for line in lines:"},{"line_number":395,"context_line":"            if \u0027Share users\u0027 in line:"},{"line_number":396,"context_line":"                users \u003d line.split(\u0027: \u0027)"},{"line_number":397,"context_line":"                if users[1] \u003d\u003d \u00270\u0027:"},{"line_number":398,"context_line":"                    return False"},{"line_number":399,"context_line":"                else:"},{"line_number":400,"context_line":"                    return True"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def _cifs_list(self, vvol_name):"},{"line_number":403,"context_line":"        command \u003d [\u0027cifs-share\u0027, \u0027list\u0027, vvol_name]"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_d225f1ae","line":400,"range":{"start_line":394,"start_character":0,"end_line":400,"end_character":31},"updated":"2016-07-27 16:23:00.000000000","message":"Shouldn\u0027t this be done in a parser class?","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":391,"context_line":""},{"line_number":392,"context_line":"        lines \u003d output.split(\u0027\\n\u0027)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        for line in lines:"},{"line_number":395,"context_line":"            if \u0027Share users\u0027 in line:"},{"line_number":396,"context_line":"                users \u003d line.split(\u0027: \u0027)"},{"line_number":397,"context_line":"                if users[1] \u003d\u003d \u00270\u0027:"},{"line_number":398,"context_line":"                    return False"},{"line_number":399,"context_line":"                else:"},{"line_number":400,"context_line":"                    return True"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def _cifs_list(self, vvol_name):"},{"line_number":403,"context_line":"        command \u003d [\u0027cifs-share\u0027, \u0027list\u0027, vvol_name]"}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_c044cd75","line":400,"range":{"start_line":394,"start_character":0,"end_line":400,"end_character":31},"in_reply_to":"bacf61ea_d225f1ae","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"7ca0a5143edd2d5ca7a431f67683514249d5ad41","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        try:"},{"line_number":144,"context_line":"            self._execute(command)"},{"line_number":145,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":146,"context_line":"            LOG.warning(_LW(\u0027User %(user)s already not allowed to access \u0027"},{"line_number":147,"context_line":"                            \u0027share %(share)s.\u0027),"},{"line_number":148,"context_line":"                        {\u0027user\u0027: user, \u0027share\u0027: hnas_share_id})"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_88c5c53d","line":146,"range":{"start_line":146,"start_character":11,"end_line":146,"end_character":74},"updated":"2016-07-28 19:38:19.000000000","message":"please add a \u0027NOTE(alyson):\u0027 stating why you removed the else condition.","commit_id":"4caf3a77e07f2e98c80f7c213145ddc811280e84"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"a5167f0b89aaaefb349e49c602207e759903b4ca","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        try:"},{"line_number":144,"context_line":"            self._execute(command)"},{"line_number":145,"context_line":"        except processutils.ProcessExecutionError:"},{"line_number":146,"context_line":"            LOG.warning(_LW(\u0027User %(user)s already not allowed to access \u0027"},{"line_number":147,"context_line":"                            \u0027share %(share)s.\u0027),"},{"line_number":148,"context_line":"                        {\u0027user\u0027: user, \u0027share\u0027: hnas_share_id})"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_dca81bde","line":146,"range":{"start_line":146,"start_character":11,"end_line":146,"end_character":74},"in_reply_to":"bacf61ea_88c5c53d","updated":"2016-07-28 20:55:52.000000000","message":"Ok, now Im logging this when users doesn\u0027t exists or already not allowed and raising an exception if another error occurs on backend.","commit_id":"4caf3a77e07f2e98c80f7c213145ddc811280e84"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"0939ed3dcbcec9cc6fd203809bb565288390a5f0","unresolved":false,"context_lines":[{"line_number":672,"context_line":"                self.fs \u003d line.split(\u0027: \u0027)[1]"},{"line_number":673,"context_line":"            if \u0027Share users\u0027 in line:"},{"line_number":674,"context_line":"                users \u003d line.split(\u0027: \u0027)"},{"line_number":675,"context_line":"                if users[1] \u003d\u003d \u00270\u0027:"},{"line_number":676,"context_line":"                    self.is_mounted \u003d False"},{"line_number":677,"context_line":"                else:"},{"line_number":678,"context_line":"                    self.is_mounted \u003d True"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_6b020b0d","line":678,"range":{"start_line":675,"start_character":0,"end_line":678,"end_character":42},"updated":"2016-07-28 20:16:21.000000000","message":"self.is_mounted \u003d users[1] !\u003d \u00270\u0027","commit_id":"4caf3a77e07f2e98c80f7c213145ddc811280e84"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"a5167f0b89aaaefb349e49c602207e759903b4ca","unresolved":false,"context_lines":[{"line_number":672,"context_line":"                self.fs \u003d line.split(\u0027: \u0027)[1]"},{"line_number":673,"context_line":"            if \u0027Share users\u0027 in line:"},{"line_number":674,"context_line":"                users \u003d line.split(\u0027: \u0027)"},{"line_number":675,"context_line":"                if users[1] \u003d\u003d \u00270\u0027:"},{"line_number":676,"context_line":"                    self.is_mounted \u003d False"},{"line_number":677,"context_line":"                else:"},{"line_number":678,"context_line":"                    self.is_mounted \u003d True"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_5cb54b2f","line":678,"range":{"start_line":675,"start_character":0,"end_line":678,"end_character":42},"in_reply_to":"bacf61ea_6b020b0d","updated":"2016-07-28 20:55:52.000000000","message":"Done!","commit_id":"4caf3a77e07f2e98c80f7c213145ddc811280e84"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4dee4c6736b963e2031c90d7ecb0664b42682418","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            else:"},{"line_number":152,"context_line":"                msg \u003d six.text_type(e)"},{"line_number":153,"context_line":"                LOG.exception(msg)"},{"line_number":154,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def list_cifs_permissions(self, hnas_share_id):"},{"line_number":157,"context_line":"        command \u003d [\u0027cifs-saa\u0027, \u0027list\u0027, \u0027--target-label\u0027, self.fs_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_28991220","line":154,"range":{"start_line":154,"start_character":32,"end_line":154,"end_character":50},"updated":"2016-07-29 13:26:33.000000000","message":"this should be HNASBackendException. InvalidShareAccess is for when you provide incompatible access type or protocol.","commit_id":"229c996cb477a5417c6e7d24960a8de21375cfc0"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"66d7cb519bab6efd4677b135982f87212239ea22","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            else:"},{"line_number":152,"context_line":"                msg \u003d six.text_type(e)"},{"line_number":153,"context_line":"                LOG.exception(msg)"},{"line_number":154,"context_line":"                raise exception.InvalidShareAccess(reason\u003dmsg)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def list_cifs_permissions(self, hnas_share_id):"},{"line_number":157,"context_line":"        command \u003d [\u0027cifs-saa\u0027, \u0027list\u0027, \u0027--target-label\u0027, self.fs_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_68baea6f","line":154,"range":{"start_line":154,"start_character":32,"end_line":154,"end_character":50},"in_reply_to":"bacf61ea_28991220","updated":"2016-07-29 14:19:14.000000000","message":"Done","commit_id":"229c996cb477a5417c6e7d24960a8de21375cfc0"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"6f716b726fa0bb5882921d3f13916baf8c001409","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        lines \u003d data.split(\u0027\\n\u0027)"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        for line in lines:"},{"line_number":647,"context_line":"            permission \u003d \u0027\u0027"},{"line_number":648,"context_line":"            user \u003d \u0027\u0027"},{"line_number":649,"context_line":"            if \u0027Allow Read\u0027 in line:"},{"line_number":650,"context_line":"                permission \u003d \u0027ar\u0027"},{"line_number":651,"context_line":"                user \u003d line.split(\u0027Allow Read\u0027)[1:][0].strip()"},{"line_number":652,"context_line":"            elif \u0027Allow Change \u0026 Read\u0027 in line:"},{"line_number":653,"context_line":"                permission \u003d \u0027acr\u0027"},{"line_number":654,"context_line":"                user \u003d line.split(\u0027Allow Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":655,"context_line":"            elif \u0027Allow Full Control\u0027 in line:"},{"line_number":656,"context_line":"                permission \u003d \u0027af\u0027"},{"line_number":657,"context_line":"                user \u003d line.split(\u0027Allow Full Control\u0027)[1:][0].strip()"},{"line_number":658,"context_line":"            elif \u0027Deny  Full Control\u0027 in line:"},{"line_number":659,"context_line":"                permission \u003d \u0027df\u0027"},{"line_number":660,"context_line":"                user \u003d line.split(\u0027Deny  Full Control\u0027)[1:][0].strip()"},{"line_number":661,"context_line":"            elif \u0027Deny  Change \u0026 Read\u0027 in line:"},{"line_number":662,"context_line":"                permission \u003d \u0027dcr\u0027"},{"line_number":663,"context_line":"                user \u003d line.split(\u0027Deny  Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":664,"context_line":"            elif \u0027Deny  Read\u0027 in line:"},{"line_number":665,"context_line":"                permission \u003d \u0027dr\u0027"},{"line_number":666,"context_line":"                user \u003d line.split(\u0027Deny  Read\u0027)[1:][0].strip()"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"            if user:"},{"line_number":669,"context_line":"                self.permission_list.append((user, permission))"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"class CIFSShare(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_d2146645","line":669,"range":{"start_line":647,"start_character":0,"end_line":669,"end_character":63},"updated":"2016-07-29 11:46:07.000000000","message":"In order to avoid writing these tokens on two different places and to avoid this line split code replication, these lines could be changed to:\n\n    hnas_cifs_permissions \u003d [(\u0027Allow Read\u0027, \u0027ar\u0027), (\u0027Allow Change \u0026 Read\u0027, \u0027acr\u0027), ...]\n    filtered \u003d filter(lambda x: x[0] in line, hnas_cifs_permissions)\n    \n    if len(filtered) \u003d\u003d 1:\n        user \u003d line.split(filtered[0])[1:][0].strip()\n        self.permission_list.append(user, filtered[1])","commit_id":"229c996cb477a5417c6e7d24960a8de21375cfc0"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"66d7cb519bab6efd4677b135982f87212239ea22","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        lines \u003d data.split(\u0027\\n\u0027)"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        for line in lines:"},{"line_number":647,"context_line":"            permission \u003d \u0027\u0027"},{"line_number":648,"context_line":"            user \u003d \u0027\u0027"},{"line_number":649,"context_line":"            if \u0027Allow Read\u0027 in line:"},{"line_number":650,"context_line":"                permission \u003d \u0027ar\u0027"},{"line_number":651,"context_line":"                user \u003d line.split(\u0027Allow Read\u0027)[1:][0].strip()"},{"line_number":652,"context_line":"            elif \u0027Allow Change \u0026 Read\u0027 in line:"},{"line_number":653,"context_line":"                permission \u003d \u0027acr\u0027"},{"line_number":654,"context_line":"                user \u003d line.split(\u0027Allow Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":655,"context_line":"            elif \u0027Allow Full Control\u0027 in line:"},{"line_number":656,"context_line":"                permission \u003d \u0027af\u0027"},{"line_number":657,"context_line":"                user \u003d line.split(\u0027Allow Full Control\u0027)[1:][0].strip()"},{"line_number":658,"context_line":"            elif \u0027Deny  Full Control\u0027 in line:"},{"line_number":659,"context_line":"                permission \u003d \u0027df\u0027"},{"line_number":660,"context_line":"                user \u003d line.split(\u0027Deny  Full Control\u0027)[1:][0].strip()"},{"line_number":661,"context_line":"            elif \u0027Deny  Change \u0026 Read\u0027 in line:"},{"line_number":662,"context_line":"                permission \u003d \u0027dcr\u0027"},{"line_number":663,"context_line":"                user \u003d line.split(\u0027Deny  Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":664,"context_line":"            elif \u0027Deny  Read\u0027 in line:"},{"line_number":665,"context_line":"                permission \u003d \u0027dr\u0027"},{"line_number":666,"context_line":"                user \u003d line.split(\u0027Deny  Read\u0027)[1:][0].strip()"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"            if user:"},{"line_number":669,"context_line":"                self.permission_list.append((user, permission))"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"class CIFSShare(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_73a93cdf","line":669,"range":{"start_line":647,"start_character":0,"end_line":669,"end_character":63},"in_reply_to":"bacf61ea_b291f254","updated":"2016-07-29 14:19:14.000000000","message":"Awesome, thanks Tiago :)","commit_id":"229c996cb477a5417c6e7d24960a8de21375cfc0"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4dee4c6736b963e2031c90d7ecb0664b42682418","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        lines \u003d data.split(\u0027\\n\u0027)"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        for line in lines:"},{"line_number":647,"context_line":"            permission \u003d \u0027\u0027"},{"line_number":648,"context_line":"            user \u003d \u0027\u0027"},{"line_number":649,"context_line":"            if \u0027Allow Read\u0027 in line:"},{"line_number":650,"context_line":"                permission \u003d \u0027ar\u0027"},{"line_number":651,"context_line":"                user \u003d line.split(\u0027Allow Read\u0027)[1:][0].strip()"},{"line_number":652,"context_line":"            elif \u0027Allow Change \u0026 Read\u0027 in line:"},{"line_number":653,"context_line":"                permission \u003d \u0027acr\u0027"},{"line_number":654,"context_line":"                user \u003d line.split(\u0027Allow Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":655,"context_line":"            elif \u0027Allow Full Control\u0027 in line:"},{"line_number":656,"context_line":"                permission \u003d \u0027af\u0027"},{"line_number":657,"context_line":"                user \u003d line.split(\u0027Allow Full Control\u0027)[1:][0].strip()"},{"line_number":658,"context_line":"            elif \u0027Deny  Full Control\u0027 in line:"},{"line_number":659,"context_line":"                permission \u003d \u0027df\u0027"},{"line_number":660,"context_line":"                user \u003d line.split(\u0027Deny  Full Control\u0027)[1:][0].strip()"},{"line_number":661,"context_line":"            elif \u0027Deny  Change \u0026 Read\u0027 in line:"},{"line_number":662,"context_line":"                permission \u003d \u0027dcr\u0027"},{"line_number":663,"context_line":"                user \u003d line.split(\u0027Deny  Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":664,"context_line":"            elif \u0027Deny  Read\u0027 in line:"},{"line_number":665,"context_line":"                permission \u003d \u0027dr\u0027"},{"line_number":666,"context_line":"                user \u003d line.split(\u0027Deny  Read\u0027)[1:][0].strip()"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"            if user:"},{"line_number":669,"context_line":"                self.permission_list.append((user, permission))"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"class CIFSShare(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_685e6a77","line":669,"range":{"start_line":647,"start_character":0,"end_line":669,"end_character":63},"in_reply_to":"bacf61ea_b291f254","updated":"2016-07-29 13:26:33.000000000","message":"I am torn between legibility and this. Whichever you choose to keep.","commit_id":"229c996cb477a5417c6e7d24960a8de21375cfc0"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"66350e096257a3ff49539fed68fa002f641cc19a","unresolved":false,"context_lines":[{"line_number":644,"context_line":"        lines \u003d data.split(\u0027\\n\u0027)"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        for line in lines:"},{"line_number":647,"context_line":"            permission \u003d \u0027\u0027"},{"line_number":648,"context_line":"            user \u003d \u0027\u0027"},{"line_number":649,"context_line":"            if \u0027Allow Read\u0027 in line:"},{"line_number":650,"context_line":"                permission \u003d \u0027ar\u0027"},{"line_number":651,"context_line":"                user \u003d line.split(\u0027Allow Read\u0027)[1:][0].strip()"},{"line_number":652,"context_line":"            elif \u0027Allow Change \u0026 Read\u0027 in line:"},{"line_number":653,"context_line":"                permission \u003d \u0027acr\u0027"},{"line_number":654,"context_line":"                user \u003d line.split(\u0027Allow Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":655,"context_line":"            elif \u0027Allow Full Control\u0027 in line:"},{"line_number":656,"context_line":"                permission \u003d \u0027af\u0027"},{"line_number":657,"context_line":"                user \u003d line.split(\u0027Allow Full Control\u0027)[1:][0].strip()"},{"line_number":658,"context_line":"            elif \u0027Deny  Full Control\u0027 in line:"},{"line_number":659,"context_line":"                permission \u003d \u0027df\u0027"},{"line_number":660,"context_line":"                user \u003d line.split(\u0027Deny  Full Control\u0027)[1:][0].strip()"},{"line_number":661,"context_line":"            elif \u0027Deny  Change \u0026 Read\u0027 in line:"},{"line_number":662,"context_line":"                permission \u003d \u0027dcr\u0027"},{"line_number":663,"context_line":"                user \u003d line.split(\u0027Deny  Change \u0026 Read\u0027)[1:][0].strip()"},{"line_number":664,"context_line":"            elif \u0027Deny  Read\u0027 in line:"},{"line_number":665,"context_line":"                permission \u003d \u0027dr\u0027"},{"line_number":666,"context_line":"                user \u003d line.split(\u0027Deny  Read\u0027)[1:][0].strip()"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"            if user:"},{"line_number":669,"context_line":"                self.permission_list.append((user, permission))"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"class CIFSShare(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_b291f254","line":669,"range":{"start_line":647,"start_character":0,"end_line":669,"end_character":63},"in_reply_to":"bacf61ea_d2146645","updated":"2016-07-29 11:51:20.000000000","message":"The snippet above is wrong, sorry, it should be:\n\n    hnas_cifs_permissions \u003d [(\u0027Allow Read\u0027, \u0027ar\u0027), (\u0027Allow Change \u0026 Read\u0027, \u0027acr\u0027), ...]\n    filtered \u003d filter(lambda x: x[0] in line, hnas_cifs_permissions)\n    \n    if len(filtered) \u003d\u003d 1:\n        token, permission \u003d filtered[0]\n        user \u003d line.split(token])[1:][0].strip()\n        self.permission_list.append(user, permission)","commit_id":"229c996cb477a5417c6e7d24960a8de21375cfc0"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"6f716b726fa0bb5882921d3f13916baf8c001409","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        for line in lines:"},{"line_number":677,"context_line":"            if \u0027File system label\u0027 in line:"},{"line_number":678,"context_line":"                self.fs \u003d line.split(\u0027: \u0027)[1]"},{"line_number":679,"context_line":"            if \u0027Share users\u0027 in line:"},{"line_number":680,"context_line":"                users \u003d line.split(\u0027: \u0027)"},{"line_number":681,"context_line":"                self.is_mounted \u003d users[1] !\u003d \u00270\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_3278628f","line":679,"range":{"start_line":679,"start_character":12,"end_line":679,"end_character":14},"updated":"2016-07-29 11:46:07.000000000","message":"This should be an elif","commit_id":"229c996cb477a5417c6e7d24960a8de21375cfc0"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"4dee4c6736b963e2031c90d7ecb0664b42682418","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        for line in lines:"},{"line_number":677,"context_line":"            if \u0027File system label\u0027 in line:"},{"line_number":678,"context_line":"                self.fs \u003d line.split(\u0027: \u0027)[1]"},{"line_number":679,"context_line":"            if \u0027Share users\u0027 in line:"},{"line_number":680,"context_line":"                users \u003d line.split(\u0027: \u0027)"},{"line_number":681,"context_line":"                self.is_mounted \u003d users[1] !\u003d \u00270\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_a8698227","line":679,"range":{"start_line":679,"start_character":12,"end_line":679,"end_character":14},"in_reply_to":"bacf61ea_3278628f","updated":"2016-07-29 13:26:33.000000000","message":"+1, I think should be improved.","commit_id":"229c996cb477a5417c6e7d24960a8de21375cfc0"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"66d7cb519bab6efd4677b135982f87212239ea22","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        for line in lines:"},{"line_number":677,"context_line":"            if \u0027File system label\u0027 in line:"},{"line_number":678,"context_line":"                self.fs \u003d line.split(\u0027: \u0027)[1]"},{"line_number":679,"context_line":"            if \u0027Share users\u0027 in line:"},{"line_number":680,"context_line":"                users \u003d line.split(\u0027: \u0027)"},{"line_number":681,"context_line":"                self.is_mounted \u003d users[1] !\u003d \u00270\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_382fa3f7","line":679,"range":{"start_line":679,"start_character":12,"end_line":679,"end_character":14},"in_reply_to":"bacf61ea_3278628f","updated":"2016-07-29 14:19:14.000000000","message":"Done","commit_id":"229c996cb477a5417c6e7d24960a8de21375cfc0"}],"manila/tests/share/drivers/hitachi/test_hds_hnas.py":[{"author":{"_account_id":15100,"name":"zhongjun","email":"jun.zhongjun2@gmail.com","username":"zhongjun2"},"change_message_id":"0bcc1289889192a23d71e52452c80c34e89664cd","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    \u0027name\u0027: \u0027aa4a7710-f326-41fb-ad18-b4ad587fc87a\u0027,"},{"line_number":107,"context_line":"    \u0027size\u0027: 100,"},{"line_number":108,"context_line":"    \u0027host\u0027: \u0027hnas\u0027,"},{"line_number":109,"context_line":"    \u0027share_proto\u0027: \u0027iSCSI\u0027,"},{"line_number":110,"context_line":"}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"invalid_access_type \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_e98135fd","line":109,"range":{"start_line":109,"start_character":20,"end_line":109,"end_character":25},"updated":"2016-07-17 15:18:09.000000000","message":"The iSCSI protocol is not exist, it will be filter by api. you could add a real protocol in this. such as: CephFS, GlusterFS or HDFS","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    \u0027name\u0027: \u0027aa4a7710-f326-41fb-ad18-b4ad587fc87a\u0027,"},{"line_number":107,"context_line":"    \u0027size\u0027: 100,"},{"line_number":108,"context_line":"    \u0027host\u0027: \u0027hnas\u0027,"},{"line_number":109,"context_line":"    \u0027share_proto\u0027: \u0027iSCSI\u0027,"},{"line_number":110,"context_line":"}"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"invalid_access_type \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"dada55a8_43f807e6","line":109,"range":{"start_line":109,"start_character":20,"end_line":109,"end_character":25},"in_reply_to":"dada55a8_e98135fd","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"9c3068253d8815c71060e9c7dd423f576993e8e3","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        self.mock_object(self._driver, \u0027_get_hnas_share_id\u0027,"},{"line_number":262,"context_line":"                         mock.Mock(return_value\u003d\u0027hnas_id\u0027))"},{"line_number":263,"context_line":"        self.mock_object(self._driver, \u0027_ensure_share\u0027)"},{"line_number":264,"context_line":"        self.mock_object(ssh.HNASSSHBackend, \u0027cifs_allow_access\u0027, mock.Mock())"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        self._driver.update_access(\u0027context\u0027, share_cifs, [],"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_775193d8","line":263,"range":{"start_line":263,"start_character":8,"end_line":263,"end_character":55},"updated":"2016-07-22 11:36:43.000000000","message":"You mock it in lots of tests, maybe better to mock in setUp method? Also, if you mock it, then you expect it to be used, then it would be good to make assertions of it.","commit_id":"3afa0d7bd87d2358dcbbdf141494a42992db598c"},{"author":{"_account_id":17097,"name":"Tiago Pasqualini da Silva","email":"t.pasqualini@luizalabs.com","username":"tiago.pasqualini"},"change_message_id":"ca7bf27823fe8f64242a808d57b66ddb4dd51d2b","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                               invalid_share, [], [], [])"},{"line_number":320,"context_line":"        self.assertEqual(invalid_protocol_msg, ex.msg)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def test_recovery_mode(self):"},{"line_number":323,"context_line":"        access_list \u003d [access_cifs_rw, access_cifs_ro]"},{"line_number":324,"context_line":"        permission_list \u003d [(\u0027fake_user1\u0027, \u0027acr\u0027), (\u0027fake_user2\u0027, \u0027ar\u0027)]"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_127ca971","line":322,"range":{"start_line":322,"start_character":8,"end_line":322,"end_character":26},"updated":"2016-07-27 16:23:00.000000000","message":"test_update_access_cifs_recovery_mode","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"ec3bdda2c4785b0b7ca6923ffab927a2096f158a","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                               invalid_share, [], [], [])"},{"line_number":320,"context_line":"        self.assertEqual(invalid_protocol_msg, ex.msg)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def test_recovery_mode(self):"},{"line_number":323,"context_line":"        access_list \u003d [access_cifs_rw, access_cifs_ro]"},{"line_number":324,"context_line":"        permission_list \u003d [(\u0027fake_user1\u0027, \u0027acr\u0027), (\u0027fake_user2\u0027, \u0027ar\u0027)]"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bacf61ea_1153d5e2","line":322,"range":{"start_line":322,"start_character":8,"end_line":322,"end_character":26},"in_reply_to":"bacf61ea_127ca971","updated":"2016-07-28 14:28:29.000000000","message":"Done","commit_id":"c70b1360a26f5328b913672f22cc3cdcd63cdac6"}],"releasenotes/notes/hitachi-driver-cifs-user-support-3f1a8b894fe3e9bb.yaml":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Add support for CIFS protocol in Manila HNAS driver."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Added support for CIFS shares in Hitachi HNAS driver. It supports "},{"line_number":6,"context_line":"    user access type, where a permission for an user or a group can be "},{"line_number":7,"context_line":"    added/removed. Also, accepts \u0027read write\u0027 and \u0027read only\u0027 as access "},{"line_number":8,"context_line":"    level."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"fad55976_c5d7e921","line":5,"range":{"start_line":5,"start_character":69,"end_line":5,"end_character":70},"updated":"2016-07-15 18:02:10.000000000","message":"trailing space","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Add support for CIFS protocol in Manila HNAS driver."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Added support for CIFS shares in Hitachi HNAS driver. It supports "},{"line_number":6,"context_line":"    user access type, where a permission for an user or a group can be "},{"line_number":7,"context_line":"    added/removed. Also, accepts \u0027read write\u0027 and \u0027read only\u0027 as access "},{"line_number":8,"context_line":"    level."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"fad55976_768d157b","line":5,"range":{"start_line":5,"start_character":69,"end_line":5,"end_character":70},"in_reply_to":"fad55976_c5d7e921","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bd81d97086f37662ae5af1c086c3f3db57508de5","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Add support for CIFS protocol in Manila HNAS driver."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Added support for CIFS shares in Hitachi HNAS driver. It supports "},{"line_number":6,"context_line":"    user access type, where a permission for an user or a group can be "},{"line_number":7,"context_line":"    added/removed. Also, accepts \u0027read write\u0027 and \u0027read only\u0027 as access "},{"line_number":8,"context_line":"    level."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"fad55976_25ab658b","line":6,"range":{"start_line":6,"start_character":45,"end_line":6,"end_character":47},"updated":"2016-07-15 18:02:10.000000000","message":"s/an/a","commit_id":"92229262f079caa8afe302c10c64578b25674b83"},{"author":{"_account_id":14907,"name":"Alyson","email":"alyson.rodrigues.rosa@gmail.com","username":"Alyson"},"change_message_id":"8ac4213f3b82cae52489d305395df3427922d868","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    Add support for CIFS protocol in Manila HNAS driver."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Added support for CIFS shares in Hitachi HNAS driver. It supports "},{"line_number":6,"context_line":"    user access type, where a permission for an user or a group can be "},{"line_number":7,"context_line":"    added/removed. Also, accepts \u0027read write\u0027 and \u0027read only\u0027 as access "},{"line_number":8,"context_line":"    level."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"fad55976_96bec9fd","line":6,"range":{"start_line":6,"start_character":45,"end_line":6,"end_character":47},"in_reply_to":"fad55976_25ab658b","updated":"2016-07-19 16:01:47.000000000","message":"Done","commit_id":"92229262f079caa8afe302c10c64578b25674b83"}]}
