)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c62a411bee8c24383467b8af2c3c746a68ce0266","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If someone chooses to run under uwsgi/apache instead of eventlet, the"},{"line_number":10,"context_line":"basic logging of requests goes away (as that was an eventlet"},{"line_number":11,"context_line":"function). That makes one of the most events in the logs disappear."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This creates a new request_log middleware, inspired by the one in"},{"line_number":14,"context_line":"placement, to provide that functionality. This requires changes to the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1f1a1f67_218785b9","line":11,"updated":"2017-07-20 12:59:09.000000000","message":"That makes one of the most useful pieces of info in the logs disappear\n\n?","commit_id":"12498767d6e75c32bd3f3edd1c32afab7562d4a7"}],"nova/api/openstack/compute/versions.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"79d115c883dbeee6aa2512c28fe62f04446b104e","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class Versions(wsgi.Resource):"},{"line_number":76,"context_line":"    support_api_request_version \u003d True"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def __init__(self):"},{"line_number":79,"context_line":"        super(Versions, self).__init__(None)"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_1d83b758","line":77,"updated":"2017-07-20 20:56:14.000000000","message":"so this bit is weird, and interesting. The fact that our / document inherits from the v2.0 resource instead of v2.1 drops all the mv headers. \n\nThe tests are easier if it\u0027s this way. It\u0027s also definitely a violation of unrelated changes. I could mock it, but it seems worth at least letting people see this issue before finding a work around.\n\nBecause I think that we actually do want mv headers to not be dropped on the floor on the root document.","commit_id":"d0cf3bc910207f756f092f179a8023fd51fc6f56"}],"nova/api/openstack/requestlog.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"18d18312fa84ff21826b1e754338e86c384c07fc","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        already are logging things, let it go. This is broken out as a"},{"line_number":54,"context_line":"        separate method so that it can be easily adjusted for testing."},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        if req.environ.get(\u0027eventlet.input\u0027, None) is not None:"},{"line_number":57,"context_line":"            return False"},{"line_number":58,"context_line":"        return True"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_884770bd","line":56,"updated":"2017-07-21 12:36:14.000000000","message":"None is the default on get, but I like the explicitness myself","commit_id":"9768f449c77277ad7c22f8f4a877e07821947f48"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"18d18312fa84ff21826b1e754338e86c384c07fc","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        res \u003d {}"},{"line_number":82,"context_line":"        try:"},{"line_number":83,"context_line":"            # TODO(sdague) we used to provide timings, that shouldn\u0027t"},{"line_number":84,"context_line":"            # be too hard to put back in."},{"line_number":85,"context_line":"            start \u003d time.time()"},{"line_number":86,"context_line":"            res \u003d req.get_response(self.application)"},{"line_number":87,"context_line":"            self._log_req(req, res, start)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_088240c9","line":84,"updated":"2017-07-21 12:36:14.000000000","message":"You\u0027ve put them back in, so todo can go away?","commit_id":"9768f449c77277ad7c22f8f4a877e07821947f48"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"85322690c559b59e52d14e4f23ce502b8db85acc","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    Borrowed from Paste Translogger"},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    # This matches the placement fil"},{"line_number":36,"context_line":"    _log_format \u003d (\u0027%(REMOTE_ADDR)s \"%(REQUEST_METHOD)s %(REQUEST_URI)s\" \u0027"},{"line_number":37,"context_line":"                   \u0027status: %(status)s len: %(len)s \u0027"},{"line_number":38,"context_line":"              \u0027microversion: %(microversion)s time: %(time).6f\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_7bbd5367","line":35,"range":{"start_line":35,"start_character":33,"end_line":35,"end_character":36},"updated":"2017-07-21 20:29:37.000000000","message":"file?","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"41dd72d59eb34916061133788e4c8fbdaf386cc9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    # This matches the placement fil"},{"line_number":36,"context_line":"    _log_format \u003d (\u0027%(REMOTE_ADDR)s \"%(REQUEST_METHOD)s %(REQUEST_URI)s\" \u0027"},{"line_number":37,"context_line":"                   \u0027status: %(status)s len: %(len)s \u0027"},{"line_number":38,"context_line":"              \u0027microversion: %(microversion)s time: %(time).6f\u0027)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_2f73f382","line":36,"updated":"2017-07-23 13:32:53.000000000","message":"We probably add a note for this option is only for evenlet https://github.com/openstack/nova/blob/master/nova/conf/wsgi.py#L44","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"e0897568cc94eea7d2baeeb218f2a9ad81d13e8e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    # This matches the placement fil"},{"line_number":36,"context_line":"    _log_format \u003d (\u0027%(REMOTE_ADDR)s \"%(REQUEST_METHOD)s %(REQUEST_URI)s\" \u0027"},{"line_number":37,"context_line":"                   \u0027status: %(status)s len: %(len)s \u0027"},{"line_number":38,"context_line":"              \u0027microversion: %(microversion)s time: %(time).6f\u0027)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_481e1fbb","line":36,"in_reply_to":"ff346bd7_2f73f382","updated":"2017-07-24 10:46:44.000000000","message":"oh, interesting. I do wonder if we should merge this with that. I\u0027ll ask matt.","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48875bbd0255d1276760d127f9221d68c9e533cc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    # This matches the placement fil"},{"line_number":36,"context_line":"    _log_format \u003d (\u0027%(REMOTE_ADDR)s \"%(REQUEST_METHOD)s %(REQUEST_URI)s\" \u0027"},{"line_number":37,"context_line":"                   \u0027status: %(status)s len: %(len)s \u0027"},{"line_number":38,"context_line":"              \u0027microversion: %(microversion)s time: %(time).6f\u0027)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_29451ab4","line":36,"in_reply_to":"ff346bd7_481e1fbb","updated":"2017-07-24 13:45:47.000000000","message":"Digging in history, the wsgi_log_format option was added to Nova 5 years ago:\n\nI57917b62c1f2cc4bba06011191dcf0b5342d7d43\n\nIt looks like that was to workaround a limitation in eventlet wsgi request logging.\n\nThat eventually got duplicated into other projects and into oslo.service:\n\nIf8840168f10cc3561f4f01e6d456d6b4fd1de8b5\n\nAt this point it seems weird to be even having that wsgi_log_format option since the default in eventlet.wsgi should suffice:\n\nlog_format\u003d\u0027%(client_ip)s - - [%(date_time)s] \"%(request_line)s\" %(status_code)s %(body_length)s %(wall_seconds).6f\u0027\n\nSo I\u0027d say we go ahead with the hard-coded value here, and actually deprecate the wsgi_log_format option in nova.conf and then drop it in Queens to use the value from oslo.service (it looks like there are other options duplicated with oslo.service too that we can cleanup out of nova while we\u0027re at it).","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48875bbd0255d1276760d127f9221d68c9e533cc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    # This matches the placement fil"},{"line_number":36,"context_line":"    _log_format \u003d (\u0027%(REMOTE_ADDR)s \"%(REQUEST_METHOD)s %(REQUEST_URI)s\" \u0027"},{"line_number":37,"context_line":"                   \u0027status: %(status)s len: %(len)s \u0027"},{"line_number":38,"context_line":"              \u0027microversion: %(microversion)s time: %(time).6f\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @staticmethod"},{"line_number":41,"context_line":"    def _get_uri(environ):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_2e4880ca","line":38,"updated":"2017-07-24 13:45:47.000000000","message":"alignment","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48875bbd0255d1276760d127f9221d68c9e533cc","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    @staticmethod"},{"line_number":41,"context_line":"    def _get_uri(environ):"},{"line_number":42,"context_line":"        req_uri \u003d (environ.get(\u0027SCRIPT_NAME\u0027, \u0027\u0027)"},{"line_number":43,"context_line":"                + environ.get(\u0027PATH_INFO\u0027, \u0027\u0027))"},{"line_number":44,"context_line":"        if environ.get(\u0027QUERY_STRING\u0027):"},{"line_number":45,"context_line":"            req_uri +\u003d \u0027?\u0027 + environ[\u0027QUERY_STRING\u0027]"},{"line_number":46,"context_line":"        return req_uri"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_89cbe651","line":43,"updated":"2017-07-24 13:45:47.000000000","message":"alignment","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"85322690c559b59e52d14e4f23ce502b8db85acc","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            return res"},{"line_number":90,"context_line":"        except Exception:"},{"line_number":91,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":92,"context_line":"                self._log_req(req, res, start)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_063eea28","line":92,"updated":"2017-07-21 20:29:37.000000000","message":"Not sure I understand the purpose of this, if logging failed, try to log again and reraise?\n\nUpdate: Nevermind, sdague explained on IRC: \"because of the way the paste pipelines work, if we get an unexpected exception it\u0027s going to end up going through that layer and handled at the fault layer above it. if the log message was not emitted in the except block, you\u0027d never have a record of the request. you\u0027d just have the fault error\"","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"}],"nova/tests/unit/test_request_log.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"79d115c883dbeee6aa2512c28fe62f04446b104e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    @mock.patch(\u0027nova.objects.Service.create\u0027)"},{"line_number":27,"context_line":"    @mock.patch(\u0027nova.api.openstack.requestlog.RequestLog._should_emit\u0027)"},{"line_number":28,"context_line":"    def test_logs_requests(self, emit, mock_service_create, mock_get):"},{"line_number":29,"context_line":"        \"\"\"Ensure the OSAPI server responds to calls sensibly.\"\"\""},{"line_number":30,"context_line":"        emit.return_value \u003d True"},{"line_number":31,"context_line":"        self.useFixture(fixtures.OutputStreamCapture())"},{"line_number":32,"context_line":"        log \u003d fixtures.StandardLogging()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_3d8d537b","line":29,"updated":"2017-07-20 20:56:14.000000000","message":"TODO: better comments here","commit_id":"d0cf3bc910207f756f092f179a8023fd51fc6f56"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8df099a924a2573e019aea1e62aaa882bf62d64e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 IBM Corp."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_56a112a9","line":1,"updated":"2017-07-24 18:15:08.000000000","message":"This should live under nova/tests/unit/api/openstack","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"48875bbd0255d1276760d127f9221d68c9e533cc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class TestRequestLogMiddleware(testtools.TestCase):"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(TestRequestLogMiddleware, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_89552653","line":38,"range":{"start_line":38,"start_character":41,"end_line":38,"end_character":49},"updated":"2017-07-24 13:45:47.000000000","message":"NoDBTestCase?","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c43f487a9ef364c00251ffd41b1716d8cbf436e4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\"\"\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class TestRequestLogMiddleware(testtools.TestCase):"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(TestRequestLogMiddleware, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff346bd7_f6880620","line":38,"range":{"start_line":38,"start_character":41,"end_line":38,"end_character":49},"in_reply_to":"ff346bd7_89552653","updated":"2017-07-24 18:16:33.000000000","message":"Oh I guess this is going against testtools directly for some reason.","commit_id":"502c56680c5f0a2f5d01f0a20c1debe0ec026106"}]}
