)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"change_message_id":"9241deb41946b14496774652d7b2e39d3b88da09","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix nfs server service name for rhel, suse"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In rhel, the service name of nfs-server is \"nfs-server\"."},{"line_number":10,"context_line":"And suse, the service name of nfs-server is \"nfsserver\"."},{"line_number":11,"context_line":"However, in manila, it is hard-coded in nfs-kernel-server."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I9acc924690941e4dc6954aeb49f26ee5f94dbe68"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"ba5201f7_c70cae3d","line":10,"updated":"2017-01-05 07:38:29.000000000","message":"Wrong. See inline comment","commit_id":"4500fb1c52061f2927cc8fa1ff18b703e9f60eb3"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"f118a820aaeefa494881b05ade8b91763ae1e758","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix nfs server service name for rhel."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In rhel, the service name of nfs-server is \"nfs-server\"."},{"line_number":10,"context_line":"However, in manila, it is hard-coded in nfs-kernel-server."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I9acc924690941e4dc6954aeb49f26ee5f94dbe68"},{"line_number":13,"context_line":"Closes-Bug: #1647915"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"3a461143_cae4323d","line":10,"range":{"start_line":10,"start_character":37,"end_line":10,"end_character":39},"updated":"2017-01-25 23:59:18.000000000","message":"nit: s/in/as/","commit_id":"414aad187902565c4698babf2abeb617f57919ee"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"bc8e776bcc9ebee38cfdf2da3fcb394e10df0326","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix nfs server service name for rhel."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In rhel, the service name of nfs-server is \"nfs-server\"."},{"line_number":10,"context_line":"However, in manila, it is hard-coded as nfs-kernel-server."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I9acc924690941e4dc6954aeb49f26ee5f94dbe68"},{"line_number":13,"context_line":"Closes-Bug: #1647915"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"3a461143_415bd62e","line":10,"updated":"2017-02-01 19:13:51.000000000","message":"You also changed the detection of not running (from \u0027not\u0027 in out). That needs a mention or a separate bug.","commit_id":"c64866911c76641b9d810b70f34b8b1b7ffa16c7"}],"manila/share/drivers/helpers.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"2f2870f1b0e1336dd04ff51e5fee3fb88448c5f2","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        # set nfs_service_name to nfs-server"},{"line_number":275,"context_line":"        nfs_service_name \u003d \u0027nfs-kernel-server\u0027"},{"line_number":276,"context_line":"        try:"},{"line_number":277,"context_line":"            self._ssh_exec(server, [\u0027sudo\u0027, \u0027ls\u0027, \u0027/etc/redhat-release\u0027])"},{"line_number":278,"context_line":"            nfs_service_name \u003d \u0027nfs-server\u0027"},{"line_number":279,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":280,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_b71a2c7b","line":277,"range":{"start_line":277,"start_character":36,"end_line":277,"end_character":71},"updated":"2016-12-07 09:04:53.000000000","message":"should update etc\\manila\\rootwrap.d\\share.filters correspondingly for this new added command.","commit_id":"9190b44162e91c706fdcec5cad5e650757afecc7"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"1dfa83db5a2c90221909b37d47b7e430bad357ae","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        self._ssh_exec(server, sync_cmd)"},{"line_number":271,"context_line":"        self._ssh_exec(server, [\u0027sudo\u0027, \u0027exportfs\u0027, \u0027-a\u0027])"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        # for debian"},{"line_number":274,"context_line":"        try:"},{"line_number":275,"context_line":"            out, _ \u003d self._ssh_exec("},{"line_number":276,"context_line":"                server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-kernel-server\u0027, \u0027status\u0027],"},{"line_number":277,"context_line":"                check_exit_code\u003dFalse)"},{"line_number":278,"context_line":"            if \"not\" in out:"},{"line_number":279,"context_line":"                self._ssh_exec("},{"line_number":280,"context_line":"                    server,"},{"line_number":281,"context_line":"                    [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-kernel-server\u0027, \u0027restart\u0027])"},{"line_number":282,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":283,"context_line":"            # for rhel"},{"line_number":284,"context_line":"            try:"},{"line_number":285,"context_line":"                out, _ \u003d self._ssh_exec("},{"line_number":286,"context_line":"                    server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-server\u0027, \u0027status\u0027],"},{"line_number":287,"context_line":"                    check_exit_code\u003dFalse)"},{"line_number":288,"context_line":"                if \"not\" in out:"},{"line_number":289,"context_line":"                    self._ssh_exec("},{"line_number":290,"context_line":"                        server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-server\u0027, \u0027restart\u0027])"},{"line_number":291,"context_line":"            except exception.ProcessExecutionError:"},{"line_number":292,"context_line":"                # for suse"},{"line_number":293,"context_line":"                out, _ \u003d self._ssh_exec("},{"line_number":294,"context_line":"                    server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfsserver\u0027, \u0027status\u0027],"},{"line_number":295,"context_line":"                    check_exit_code\u003dFalse)"},{"line_number":296,"context_line":"                if \"not\" in out:"},{"line_number":297,"context_line":"                    self._ssh_exec("},{"line_number":298,"context_line":"                        server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfsserver\u0027, \u0027restart\u0027])"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def get_exports_for_share(self, server, old_export_location):"},{"line_number":301,"context_line":"        self._verify_server_has_public_address(server)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_d1393543","line":298,"range":{"start_line":273,"start_character":8,"end_line":298,"end_character":76},"updated":"2016-12-08 12:25:13.000000000","message":"Two things:\n\n1) No unit tests coverage\n\n2) Recursion should be used instead of code duplication.\n\n3) Result should be remembered to avoid redundant calls each time we use not-first variant. And it will be called on each update of access for each share.\n\n4) Name of service could be configurable to cover more distros and avoid \"try-this-one-too\" approach.","commit_id":"d3dc3f957ce6e4af5023d31457577fd5c5c6c4b9"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"e2d30c99b245aa8c79afdd3cbc86a5e835077602","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        self._ssh_exec(server, sync_cmd)"},{"line_number":271,"context_line":"        self._ssh_exec(server, [\u0027sudo\u0027, \u0027exportfs\u0027, \u0027-a\u0027])"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        # for debian"},{"line_number":274,"context_line":"        try:"},{"line_number":275,"context_line":"            out, _ \u003d self._ssh_exec("},{"line_number":276,"context_line":"                server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-kernel-server\u0027, \u0027status\u0027],"},{"line_number":277,"context_line":"                check_exit_code\u003dFalse)"},{"line_number":278,"context_line":"            if \"not\" in out:"},{"line_number":279,"context_line":"                self._ssh_exec("},{"line_number":280,"context_line":"                    server,"},{"line_number":281,"context_line":"                    [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-kernel-server\u0027, \u0027restart\u0027])"},{"line_number":282,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":283,"context_line":"            # for rhel"},{"line_number":284,"context_line":"            try:"},{"line_number":285,"context_line":"                out, _ \u003d self._ssh_exec("},{"line_number":286,"context_line":"                    server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-server\u0027, \u0027status\u0027],"},{"line_number":287,"context_line":"                    check_exit_code\u003dFalse)"},{"line_number":288,"context_line":"                if \"not\" in out:"},{"line_number":289,"context_line":"                    self._ssh_exec("},{"line_number":290,"context_line":"                        server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-server\u0027, \u0027restart\u0027])"},{"line_number":291,"context_line":"            except exception.ProcessExecutionError:"},{"line_number":292,"context_line":"                # for suse"},{"line_number":293,"context_line":"                out, _ \u003d self._ssh_exec("},{"line_number":294,"context_line":"                    server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfsserver\u0027, \u0027status\u0027],"},{"line_number":295,"context_line":"                    check_exit_code\u003dFalse)"},{"line_number":296,"context_line":"                if \"not\" in out:"},{"line_number":297,"context_line":"                    self._ssh_exec("},{"line_number":298,"context_line":"                        server, [\u0027sudo\u0027, \u0027service\u0027, \u0027nfsserver\u0027, \u0027restart\u0027])"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def get_exports_for_share(self, server, old_export_location):"},{"line_number":301,"context_line":"        self._verify_server_has_public_address(server)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_949fabb3","line":298,"range":{"start_line":273,"start_character":8,"end_line":298,"end_character":76},"in_reply_to":"3a71b18c_d1393543","updated":"2016-12-08 12:33:51.000000000","message":"+1","commit_id":"d3dc3f957ce6e4af5023d31457577fd5c5c6c4b9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ca338d6c2bd6cab90ffcf90b192e542b0a6a6ada","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                    server, [\u0027sudo\u0027, \u0027service\u0027, service_name, \u0027restart\u0027])"},{"line_number":269,"context_line":"            return True"},{"line_number":270,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":271,"context_line":"            return False"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _sync_nfs_temp_and_perm_files(self, server):"},{"line_number":274,"context_line":"        \"\"\"Sync changes of exports with permanent NFS config file."}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_fc01a105","line":271,"range":{"start_line":271,"start_character":12,"end_line":271,"end_character":24},"updated":"2016-12-08 14:58:27.000000000","message":"log the exception before returning..","commit_id":"86b29f9e9fbbc5d5987ba9c46dc60aa0b58f1ae1"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7af45a48cb6029b910f7f1c155cf6e4633562eef","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                    server, [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027restart\u0027])"},{"line_number":271,"context_line":"            return True"},{"line_number":272,"context_line":"        except exception.ProcessExecutionError as e:"},{"line_number":273,"context_line":"            msg \u003d (_(\u0027NFS server not found. Error: %s.\u0027) % e)"},{"line_number":274,"context_line":"            LOG.error(msg)"},{"line_number":275,"context_line":"            return False"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def _sync_nfs_temp_and_perm_files(self, server):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_ec962493","line":274,"range":{"start_line":273,"start_character":12,"end_line":274,"end_character":26},"updated":"2016-12-09 14:04:00.000000000","message":"LOG.exception(_(\u0027NFS server not found.\u0027))","commit_id":"4b3596403436421b5384ee84c84e00d58f5d2efe"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7af45a48cb6029b910f7f1c155cf6e4633562eef","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        This is required to ensure, that after share server reboot, exports"},{"line_number":281,"context_line":"        still exist."},{"line_number":282,"context_line":"        \"\"\""},{"line_number":283,"context_line":"        global NFS_SERVICE"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        sync_cmd \u003d ["},{"line_number":286,"context_line":"            \u0027sudo\u0027, \u0027cp\u0027, const.NFS_EXPORTS_FILE_TEMP, const.NFS_EXPORTS_FILE"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_ac57cc00","line":283,"range":{"start_line":283,"start_character":8,"end_line":283,"end_character":26},"updated":"2016-12-09 14:04:00.000000000","message":"Why do you need global var? Class/instance attr should be enough.\n\nHere is example of attr usage:\n\nhttps://github.com/openstack/manila/blob/ac8b894d/manila/share/drivers/zfsonlinux/utils.py#L196","commit_id":"4b3596403436421b5384ee84c84e00d58f5d2efe"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"f699ac042bc686e478be8b9b9d0583143b77add4","unresolved":false,"context_lines":[{"line_number":263,"context_line":"            out, _ \u003d self._ssh_exec("},{"line_number":264,"context_line":"                server, [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027status\u0027],"},{"line_number":265,"context_line":"                check_exit_code\u003dFalse)"},{"line_number":266,"context_line":"            if \"not\" in out:"},{"line_number":267,"context_line":"                self._ssh_exec("},{"line_number":268,"context_line":"                    server, [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027restart\u0027])"},{"line_number":269,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_be90c04f","line":266,"range":{"start_line":266,"start_character":0,"end_line":266,"end_character":28},"updated":"2016-12-09 19:18:44.000000000","message":"I know you copied this test from the original, but I realize I don\u0027t understand how it is supposed to work.\n\nThe method name makes it sound like it always restarts the\nnfs service, but clearly the restart is conditioned on the absence of  \"not\" in the standard out from the \u0027sudo service nfs-kernel-server restart\u0027 command (to use the ubuntu case).\n\nSo first, the method should have a different name if it\ndoesn\u0027t always attempt a restart.\n\nSecond, what does this condition represent?  I can\u0027t\ntell since whether I start or stop the nfs-service\nfirst, I never see \"not\" in the standard output from\n\u0027ssh sudo service nfs-kernel-server status\u0027 (to use\nthe ubuntu case).","commit_id":"a517a9c14eddde77473655f821c955301c617c0d"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"f699ac042bc686e478be8b9b9d0583143b77add4","unresolved":false,"context_lines":[{"line_number":297,"context_line":"                    break"},{"line_number":298,"context_line":"            else:"},{"line_number":299,"context_line":"                raise exception.ManilaException("},{"line_number":300,"context_line":"                    _(\"Cound not restart NFS service.\"))"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def get_exports_for_share(self, server, old_export_location):"},{"line_number":303,"context_line":"        self._verify_server_has_public_address(server)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_9ef8647e","line":300,"range":{"start_line":300,"start_character":23,"end_line":300,"end_character":28},"updated":"2016-12-09 19:18:44.000000000","message":"Could","commit_id":"a517a9c14eddde77473655f821c955301c617c0d"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8bc1262e6cc5af4a72eb373cefe02c144e3e021","unresolved":false,"context_lines":[{"line_number":272,"context_line":"                        [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027status\u0027],"},{"line_number":273,"context_line":"                        check_exit_code\u003dFalse)"},{"line_number":274,"context_line":"                    # if out in \u0027nfsd \"not\" running\u0027"},{"line_number":275,"context_line":"                    if \u0027not\u0027 in out:"},{"line_number":276,"context_line":"                        self._ssh_exec("},{"line_number":277,"context_line":"                            server,"},{"line_number":278,"context_line":"                            [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027restart\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_61f9f37f","line":275,"range":{"start_line":275,"start_character":19,"end_line":275,"end_character":36},"updated":"2016-12-12 14:13:32.000000000","message":"It was written based on ubuntu trusty. It will not work for ubuntu xenial. Also, I very doubt it will work on other 2 distros. So, since you fix \"restart service\" approach, would be great to fix this problem too.","commit_id":"f3f18c183b57403740a6f5abd20f2c07875d0a17"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"710dd9ed82f65e1a4786d17da4801ed97d8f478a","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                entries.append(items[1])"},{"line_number":259,"context_line":"        return entries"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _is_nfs_service_stop(self, server, nfs_service):"},{"line_number":262,"context_line":"        not_running_msgs \u003d ["},{"line_number":263,"context_line":"            \u0027not running\u0027,"},{"line_number":264,"context_line":"            \u0027inactive\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_320b792d","line":261,"range":{"start_line":261,"start_character":8,"end_line":261,"end_character":28},"updated":"2016-12-18 21:12:27.000000000","message":"_is_nfs_service_stopped","commit_id":"64e00e42debd14a4ad3a0ab4f58bb1bf01d0e3e0"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"change_message_id":"cd9cdb734d6f2fd814c5e82915448ff2dc988eaa","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            nfs_services \u003d ["},{"line_number":278,"context_line":"                \u0027nfs-kernel-server\u0027,    # For Debian"},{"line_number":279,"context_line":"                \u0027nfs-server\u0027,           # For RHEL"},{"line_number":280,"context_line":"                \u0027nfsserver\u0027             # For SuSE"},{"line_number":281,"context_line":"            ]"},{"line_number":282,"context_line":"            for nfs_service in nfs_services:"},{"line_number":283,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"ba5201f7_cc15b549","line":280,"updated":"2017-01-05 07:38:02.000000000","message":"Where did you get that info? For SUSE (SLES11 and SLES12) the name is \u0027nfs-kernel-server\u0027.","commit_id":"4500fb1c52061f2927cc8fa1ff18b703e9f60eb3"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"f118a820aaeefa494881b05ade8b91763ae1e758","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            for nfs_service in nfs_services:"},{"line_number":282,"context_line":"                try:"},{"line_number":283,"context_line":"                    if self._is_nfs_service_stopped(server, nfs_service):"},{"line_number":284,"context_line":"                        self._ssh_exec("},{"line_number":285,"context_line":"                            server,"},{"line_number":286,"context_line":"                            [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027restart\u0027])"},{"line_number":287,"context_line":"                    self._nfs_service \u003d nfs_service"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a461143_4aecc2c7","line":284,"range":{"start_line":284,"start_character":24,"end_line":284,"end_character":39},"updated":"2017-01-25 23:59:18.000000000","message":"no test coverage here","commit_id":"414aad187902565c4698babf2abeb617f57919ee"},{"author":{"_account_id":7582,"name":"Jan Provaznik","email":"jan.provaznik@gmail.com","username":"jprovazn"},"change_message_id":"288a9b3d16f28b862e1b1ee5f2415203201da91d","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                    if self._is_nfs_service_stopped(server, nfs_service):"},{"line_number":284,"context_line":"                        self._ssh_exec("},{"line_number":285,"context_line":"                            server,"},{"line_number":286,"context_line":"                            [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027restart\u0027])"},{"line_number":287,"context_line":"                    self._nfs_service \u003d nfs_service"},{"line_number":288,"context_line":"                    break"},{"line_number":289,"context_line":"                except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a461143_dbd88a20","line":286,"updated":"2017-01-25 21:43:33.000000000","message":"On RHEL (and probably other systemd systems) checking a non-existing unit returns an empty stdout and stderr is:\n\n$ service nfs-kernel-server  status\nRedirecting to /bin/systemctl status  nfs-kernel-server.service\nUnit nfs-kernel-server.service could not be found.\n\nBecause \"_is_nfs_service_stopped\" method checks only stdout, it always returns True for a non-existing unit (nfs-kernel-server in this case). Consequently the service (the not-existing service) is never restarted so the ProcessExecutionError is never raised.\n\nYou probably need either:\n1) replace _is_nfs_service_stopped method with a more generic \"is it stopped or missing\"\n2) or add a \"_get_service_name\" method which returns proper service name and then do restart action on it","commit_id":"414aad187902565c4698babf2abeb617f57919ee"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"f118a820aaeefa494881b05ade8b91763ae1e758","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                    if self._is_nfs_service_stopped(server, nfs_service):"},{"line_number":284,"context_line":"                        self._ssh_exec("},{"line_number":285,"context_line":"                            server,"},{"line_number":286,"context_line":"                            [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027restart\u0027])"},{"line_number":287,"context_line":"                    self._nfs_service \u003d nfs_service"},{"line_number":288,"context_line":"                    break"},{"line_number":289,"context_line":"                except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a461143_0aa63ac1","line":286,"in_reply_to":"3a461143_dbd88a20","updated":"2017-01-25 23:59:18.000000000","message":"is_nfs_service_stopped always returns False, but otherwise +1","commit_id":"414aad187902565c4698babf2abeb617f57919ee"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"bc8e776bcc9ebee38cfdf2da3fcb394e10df0326","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        out, err \u003d self._ssh_exec("},{"line_number":268,"context_line":"            server, [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027status\u0027],"},{"line_number":269,"context_line":"            check_exit_code\u003dFalse)"},{"line_number":270,"context_line":"        for not_running_msg in not_running_msgs:"},{"line_number":271,"context_line":"            if not_running_msg in out:"},{"line_number":272,"context_line":"                return True"},{"line_number":273,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a461143_81abfed5","line":270,"range":{"start_line":270,"start_character":1,"end_line":270,"end_character":48},"updated":"2017-02-01 19:13:51.000000000","message":"this looks better than the old \"\u0027not\u0027 in out\" test but is it another bug fix? It is not just rhel rename.","commit_id":"c64866911c76641b9d810b70f34b8b1b7ffa16c7"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"bc8e776bcc9ebee38cfdf2da3fcb394e10df0326","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            for nfs_service in nfs_services:"},{"line_number":282,"context_line":"                try:"},{"line_number":283,"context_line":"                    if self._is_nfs_service_stopped(server, nfs_service):"},{"line_number":284,"context_line":"                        self._ssh_exec("},{"line_number":285,"context_line":"                            server,"},{"line_number":286,"context_line":"                            [\u0027sudo\u0027, \u0027service\u0027, nfs_service, \u0027restart\u0027])"},{"line_number":287,"context_line":"                    self._nfs_service \u003d nfs_service"},{"line_number":288,"context_line":"                    break"},{"line_number":289,"context_line":"                except exception.ProcessExecutionError:"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a461143_1e6ccb07","line":286,"range":{"start_line":284,"start_character":24,"end_line":286,"end_character":72},"updated":"2017-02-01 19:13:51.000000000","message":"no test coverage here","commit_id":"c64866911c76641b9d810b70f34b8b1b7ffa16c7"}],"manila/tests/share/drivers/test_helpers.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ca338d6c2bd6cab90ffcf90b192e542b0a6a6ada","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    def test_nfs_service_restart(self):"},{"line_number":198,"context_line":"        self.assertTrue("},{"line_number":199,"context_line":"            self._helper._nfs_service_restart(self.server, \u0027nfs-server\u0027))"},{"line_number":200,"context_line":"        self.assertFalse("},{"line_number":201,"context_line":"            exception.ProcessExecutionError,"},{"line_number":202,"context_line":"            self._helper._nfs_service_restart, self.server)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_sync_nfs_temp_and_perm_files(self):"},{"line_number":205,"context_line":"        self._helper._sync_nfs_temp_and_perm_files(self.server)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_fc9d21bc","line":202,"range":{"start_line":200,"start_character":0,"end_line":202,"end_character":59},"updated":"2016-12-08 14:58:27.000000000","message":"? What\u0027s the condition here?","commit_id":"86b29f9e9fbbc5d5987ba9c46dc60aa0b58f1ae1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ca338d6c2bd6cab90ffcf90b192e542b0a6a6ada","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_sync_nfs_temp_and_perm_files(self):"},{"line_number":205,"context_line":"        self._helper._sync_nfs_temp_and_perm_files(self.server)"},{"line_number":206,"context_line":"        self.assertRaises("},{"line_number":207,"context_line":"            exception.ManilaException,"},{"line_number":208,"context_line":"            self._helper._sync_nfs_temp_and_perm_files, self.server)"},{"line_number":209,"context_line":"        self._helper._ssh_exec.assert_has_calls("},{"line_number":210,"context_line":"            [mock.call(self.server, mock.ANY) for i in range(1)])"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_bce2c92d","line":208,"range":{"start_line":206,"start_character":8,"end_line":208,"end_character":68},"updated":"2016-12-08 14:58:27.000000000","message":"? how do you know this will raise ManilaException? you haven\u0027t mocked anything..","commit_id":"86b29f9e9fbbc5d5987ba9c46dc60aa0b58f1ae1"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8bc1262e6cc5af4a72eb373cefe02c144e3e021","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        self._helper._sync_nfs_temp_and_perm_files.assert_called_with("},{"line_number":195,"context_line":"            self.server)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_nfs_service_sync(self):"},{"line_number":198,"context_line":"        self._helper._nfs_service_sync(self.server)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def test_nfs_service_sync_nfs_server_not_found(self):"},{"line_number":201,"context_line":"        self.mock_object(self._helper, \u0027_ssh_exec\u0027,"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_01183fd2","line":198,"range":{"start_line":197,"start_character":4,"end_line":198,"end_character":51},"updated":"2016-12-12 14:13:32.000000000","message":"Test without assertions is not test.","commit_id":"f3f18c183b57403740a6f5abd20f2c07875d0a17"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8bc1262e6cc5af4a72eb373cefe02c144e3e021","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            exception.ManilaException,"},{"line_number":206,"context_line":"            self._helper._nfs_service_sync, self.server)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def test_nfs_service_sync_not_in_out(self):"},{"line_number":209,"context_line":"        out \u003d \u0027nfsd not running\u0027"},{"line_number":210,"context_line":"        if \u0027not\u0027 in out:"},{"line_number":211,"context_line":"            self._ssh_exec("},{"line_number":212,"context_line":"                self.server,"},{"line_number":213,"context_line":"                [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-kernel-server\u0027, \u0027restart\u0027])"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def test_nfs_service_sync_hasattr_nfs_service(self):"},{"line_number":216,"context_line":"        self._nfs_service \u003d \u0027nfs-kernel-server\u0027"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_017f5fe0","line":213,"range":{"start_line":208,"start_character":4,"end_line":213,"end_character":68},"updated":"2016-12-12 14:13:32.000000000","message":"Veeeeery interesting test.","commit_id":"f3f18c183b57403740a6f5abd20f2c07875d0a17"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"e8bc1262e6cc5af4a72eb373cefe02c144e3e021","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                self.server,"},{"line_number":213,"context_line":"                [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-kernel-server\u0027, \u0027restart\u0027])"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def test_nfs_service_sync_hasattr_nfs_service(self):"},{"line_number":216,"context_line":"        self._nfs_service \u003d \u0027nfs-kernel-server\u0027"},{"line_number":217,"context_line":"        if not hasattr(self, \u0027_nfs_service\u0027):"},{"line_number":218,"context_line":"            pass"},{"line_number":219,"context_line":"        else:"},{"line_number":220,"context_line":"            self._ssh_exec("},{"line_number":221,"context_line":"                self.server,"},{"line_number":222,"context_line":"                [\u0027sudo\u0027, \u0027service\u0027, self._nfs_service, \u0027restart\u0027])"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def test_sync_nfs_temp_and_perm_files(self):"},{"line_number":225,"context_line":"        self._helper._sync_nfs_temp_and_perm_files(self.server)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a71b18c_415cf77c","line":222,"range":{"start_line":215,"start_character":4,"end_line":222,"end_character":66},"updated":"2016-12-12 14:13:32.000000000","message":"This is interesting too ))\n\nThis and above \"test\"s run only one command [1] and do not do any assertions at all.\n\n[1] \n\"\"\"\nself._ssh_exec(\n                self.server,\n                [\u0027sudo\u0027, \u0027service\u0027, self._nfs_service, \u0027restart\u0027])\n\"\"\"","commit_id":"f3f18c183b57403740a6f5abd20f2c07875d0a17"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"edf504514a1fdddb69453fcbc90f71995c9ad89a","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            exception.ManilaException,"},{"line_number":210,"context_line":"            self._helper._nfs_service_sync, self.server)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def test_nfs_service_sync_not_running(self):"},{"line_number":213,"context_line":"        self._ssh_exec("},{"line_number":214,"context_line":"            self.server,"},{"line_number":215,"context_line":"            [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-kernel-server\u0027, \u0027restart\u0027])"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def test_sync_nfs_temp_and_perm_files(self):"},{"line_number":218,"context_line":"        self._helper._sync_nfs_temp_and_perm_files(self.server)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a6eadb0_f53acbe6","line":215,"range":{"start_line":212,"start_character":0,"end_line":215,"end_character":64},"updated":"2016-12-12 18:51:21.000000000","message":"Here I echo Valeriy\u0027s remark from patch set 21 that \"test without assertions is not test.\"\n\nIf you are basically just testing that a method runs beginning to end without taking an exception path you can assert that it returns None.  But often you can do something\nmore interesting, by mocking out calls in the method and\nasserting that they are or are not called.","commit_id":"bf2ae8b23d2cb4462b5d941ade44e3b656c9ea58"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"edf504514a1fdddb69453fcbc90f71995c9ad89a","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self._helper._ssh_exec.assert_has_calls("},{"line_number":220,"context_line":"            [mock.call(self.server, mock.ANY) for i in range(1)])"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def test_sync_nfs_temp_and_perm_files_hasattr_nfs_service(self):"},{"line_number":223,"context_line":"        self._nfs_service \u003d \u0027nfs-kernel-server\u0027"},{"line_number":224,"context_line":"        self._helper._sync_nfs_temp_and_perm_files(self.server)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    @ddt.data(\u0027/foo/bar\u0027, \u00275.6.7.8:/bar/quuz\u0027, \u00275.6.7.88:/foo/quuz\u0027)"},{"line_number":227,"context_line":"    def test_get_exports_for_share(self, export_location):"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a6eadb0_352523c2","line":224,"range":{"start_line":222,"start_character":0,"end_line":224,"end_character":63},"updated":"2016-12-12 18:51:21.000000000","message":"Perhaps set nfs_service to the second or third service and assert that \u0027sudo ...\u0027 is only called once?","commit_id":"bf2ae8b23d2cb4462b5d941ade44e3b656c9ea58"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"710dd9ed82f65e1a4786d17da4801ed97d8f478a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        self._helper._sync_nfs_temp_and_perm_files.assert_called_with("},{"line_number":195,"context_line":"            self.server)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def test_is_nfs_service_stop(self):"},{"line_number":198,"context_line":"        self.mock_object(self._helper, \u0027_ssh_exec\u0027,"},{"line_number":199,"context_line":"                         mock.Mock("},{"line_number":200,"context_line":"                             return_value\u003d[\u0027Active: inactive\u0027, \u0027\u0027]))"},{"line_number":201,"context_line":"        self.assertTrue("},{"line_number":202,"context_line":"            self._helper._is_nfs_service_stop(self.server,"},{"line_number":203,"context_line":"                                              \u0027nfs-kernel-server\u0027))"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def test_nfs_service_sync(self):"},{"line_number":206,"context_line":"        self.assertIsNone(self._helper._nfs_service_sync(self.server))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def test_nfs_service_sync_nfs_server_not_found(self):"},{"line_number":209,"context_line":"        self.mock_object(self._helper, \u0027_ssh_exec\u0027,"},{"line_number":210,"context_line":"                         mock.Mock("},{"line_number":211,"context_line":"                             side_effect\u003dexception.ProcessExecutionError))"},{"line_number":212,"context_line":"        self.assertRaises("},{"line_number":213,"context_line":"            exception.ManilaException,"},{"line_number":214,"context_line":"            self._helper._nfs_service_sync, self.server)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def test_nfs_service_sync_not_running(self):"},{"line_number":217,"context_line":"        self._ssh_exec("},{"line_number":218,"context_line":"            self.server,"},{"line_number":219,"context_line":"            [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-kernel-server\u0027, \u0027restart\u0027])"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def test_sync_nfs_temp_and_perm_files(self):"},{"line_number":222,"context_line":"        self._helper._sync_nfs_temp_and_perm_files(self.server)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_553d3fba","line":219,"range":{"start_line":197,"start_character":0,"end_line":219,"end_character":64},"updated":"2016-12-18 21:12:27.000000000","message":"These unit tests are not correct. Some approaches:\n\nLet\u0027s consider the _is_nfs_service_stop method:\n\n* You have three possible substrings to consider (\u0027not running\u0027, \u0027inactive\u0027,  \u0027is stopped\u0027)\n* There\u0027s also the case when you can\u0027t find any of these substrings\n* There\u0027s a possibility that _ssh_exec can fail, and give you a \"ProcessExecutionError\"\n\nSo, you have 5 test-cases to test. 3 of these test-cases are very similar, you can use the \"ddt\" (data driven testing) library to consolidate them into one test case. So, effectively, you need to write three separate test cases:\n\n* Test case 1: where there\u0027s valid output corresponding to:  (\u0027not running\u0027, \u0027inactive\u0027,  \u0027is stopped\u0027)\n* Test case 2: where the output is not among those in test case 1\n* Test case 3: _ssh_exec raises ProcessExecutionError\n\n\nConsider: Test Case 3 first:\n\n   def test__is_nfs_service_stopped_exception(self):\n        self.mock_object(self._helper, \u0027_ssh_exec\u0027,\n                         mock.Mock(side_effect\u003dexception.ProcessExecutionError)\n\n        self.assertRaises(self._helper._is_nfs_service_stopped,\n                          \u0027fake_server\u0027, \u0027fake_nfs_service\u0027)\n\n\nTest Case 2:\n\n   def test__is_nfs_service_stopped_not_stopped(self):\n        mock_output \u003d \"\"\"\n        Redirecting to /bin/systemctl status  nfs-server.service\n            nfs-server.service - NFS Server\n        Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled)\n        Active: active (exited) since Sun 2016-12-18 15:57:08 EST; 1s ago\n        Process: 12724 ExecStart\u003d/usr/sbin/rpc.nfsd $RPCNFSDARGS $RPCNFSDCOUNT\n            (code\u003dexited, status\u003d0/SUCCESS)\n        Process: 12720 ExecStartPre\u003d/usr/sbin/exportfs -r (code\u003dexited,\n            status\u003d0/SUCCESS)\n        Process: 12718 ExecStartPre\u003d/usr/libexec/nfs-utils/scripts/nfs-server\n            .preconfig (code\u003dexited, status\u003d0/SUCCESS)\n        Main PID: 12724 (code\u003dexited, status\u003d0/SUCCESS)\n        CGroup: /system.slice/nfs-server.service\n\n        Dec 18 15:57:08 newton@newtonlabs.com systemd[1]: Starting NFS\n        Server...\n        Dec 18 15:57:08 newton@newtonlabs.com systemd[1]: Started NFS\n        Server.\n        \"\"\"\n\n        self.mock_object(self._helper, \u0027_ssh_exec\u0027,\n                         mock.Mock(return_value\u003d(mock_output, \u0027\u0027)))\n\n        self.assertFalse(self._helper._is_nfs_service_stopped(\u0027fake-server\u0027,\n                                                              \u0027fake-service\u0027))\n\n\nTest Case 1: This is where we\u0027ll use ddt:\n\n    @ddt.data(\u0027is stopped\u0027, \u0027inactive\u0027, \u0027not running\u0027)\n    def test___is_nfs_service_stopped(self, message):\n         mock_output \u003d \"Status: %s\" % message\n         self.mock_object(self._helper, \u0027_ssh_exec\u0027,\n                         mock.Mock(return_value\u003d(mock_output, \u0027\u0027)))\n\n         self.assertTrue(self._helper._is_nfs_service_stopped(\u0027fake-server\u0027,\n                                                              \u0027fake-service\u0027))","commit_id":"64e00e42debd14a4ad3a0ab4f58bb1bf01d0e3e0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"710dd9ed82f65e1a4786d17da4801ed97d8f478a","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            self.server,"},{"line_number":219,"context_line":"            [\u0027sudo\u0027, \u0027service\u0027, \u0027nfs-kernel-server\u0027, \u0027restart\u0027])"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def test_sync_nfs_temp_and_perm_files(self):"},{"line_number":222,"context_line":"        self._helper._sync_nfs_temp_and_perm_files(self.server)"},{"line_number":223,"context_line":"        self._helper._ssh_exec.assert_has_calls("},{"line_number":224,"context_line":"            [mock.call(self.server, mock.ANY) for i in range(1)])"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    @ddt.data(\u0027/foo/bar\u0027, \u00275.6.7.8:/bar/quuz\u0027, \u00275.6.7.88:/foo/quuz\u0027)"},{"line_number":227,"context_line":"    def test_get_exports_for_share(self, export_location):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_f57acb76","line":224,"range":{"start_line":221,"start_character":0,"end_line":224,"end_character":65},"updated":"2016-12-18 21:12:27.000000000","message":"Please remove this test case and replace it with tests that will include the newly added \"_nfs_service_sync\" method. \n\nTests should include:\n\n* self._nfs_service being present\n* self._nfs_service being successfully inferred by the help of the logic you added\n    * test for all three cases (Debian, RHEL, SuSE)\n* unable to determine nfs_service name, it isn\u0027t one of the above cases, so, ManilaException should be raised and caught.","commit_id":"64e00e42debd14a4ad3a0ab4f58bb1bf01d0e3e0"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"bc8e776bcc9ebee38cfdf2da3fcb394e10df0326","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                         mock.Mock(return_value\u003dTrue))"},{"line_number":249,"context_line":"        self.mock_object(self._helper, \u0027_ssh_exec\u0027,"},{"line_number":250,"context_line":"                         mock.Mock(return_value\u003d(\u0027\u0027, \u0027\u0027)))"},{"line_number":251,"context_line":"        self.assertIsNone(self._helper._nfs_service_sync(\u0027fake_server\u0027))"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    @ddt.data(\u0027nfs-kernel-server\u0027, \u0027nfs-server\u0027)"},{"line_number":254,"context_line":"    def test__nfs_service_sync_has__nfs_service_running(self, _nfs_service):"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a461143_e1ce82b6","line":251,"updated":"2017-02-01 19:13:51.000000000","message":"Here and in others, you should assert that your mocked methods have been called as expected with assert_has_calls, called, assert_called_once_with, ... etc.  Like here just testing the return is not none is pretty limited. Test what the _ssh_exec mock was asked to do.","commit_id":"c64866911c76641b9d810b70f34b8b1b7ffa16c7"}],"releasenotes/notes/bug-1647915-fix-nfs-server-service-name-839d61ceb6e3587e.yaml":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"6caa41e62efeabf2a7e0946743b836c1729fffa2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fix nfs server service name for rhel, suse."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3a71b18c_7f782df9","line":3,"range":{"start_line":3,"start_character":8,"end_line":3,"end_character":45},"updated":"2016-12-08 11:57:03.000000000","message":"Try to correlate to the bug observed. In this case, briefly state what was wrong. Example: \"Fixed generic and LVM driver errors due to incorrect NFS server service name for RHEL and SuSE.\"","commit_id":"9bbca8a11b0c94feddbe5727a7941a2dbfea61b7"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"6caa41e62efeabf2a7e0946743b836c1729fffa2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fix nfs server service name for rhel, suse."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3a71b18c_7fdcad18","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":7},"updated":"2016-12-08 11:57:03.000000000","message":"Use past tense","commit_id":"9bbca8a11b0c94feddbe5727a7941a2dbfea61b7"}]}
