)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7579,"name":"jan grant","email":"jan.grant@hpe.com","username":"jang"},"change_message_id":"74bceee04a7cc8b6c930bfd49d12ace72fcfd12e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"a green lock."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"bp mutable-logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Iabc9c70ab12fabea9fc187545169215f01eaf723"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa0719c6_4d73b94d","line":18,"updated":"2016-03-22 16:18:45.000000000","message":"I\u0027d also add some context here.\n\nThere are two situations: the non-eventlet WSGI one, and the eventlet monkey-patched one.\n\nThe log module itself can\u0027t tell what it _should_ be doing; all it can tell is that it\u0027s running in a monkey_patched context.","commit_id":"363d0292fca73e2162aa5c98e6939538119145c0"}],"oslo_log/log.py":[{"author":{"_account_id":7579,"name":"jan grant","email":"jan.grant@hpe.com","username":"jang"},"change_message_id":"bd92120559b302341ce7baecc2f87fec479ab32e","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        _load_log_config.old_time \u003d 0"},{"line_number":245,"context_line":"    if conf.log_config_append:"},{"line_number":246,"context_line":"        global LOCK"},{"line_number":247,"context_line":"        if LOCK:"},{"line_number":248,"context_line":"            LOCK.acquire()"},{"line_number":249,"context_line":"            logging._lock \u003d LOCK"},{"line_number":250,"context_line":"            LOCK \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_4d1739ed","line":247,"range":{"start_line":247,"start_character":15,"end_line":247,"end_character":16},"updated":"2016-03-22 16:16:08.000000000","message":"Here: need to check eventlet.patcher.is_monkey_patched(logging)","commit_id":"363d0292fca73e2162aa5c98e6939538119145c0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"eccc4736b3cc6f1f540f539518b3ead58a28ec7c","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        _load_log_config.old_time \u003d 0"},{"line_number":245,"context_line":"    if conf.log_config_append:"},{"line_number":246,"context_line":"        global LOCK"},{"line_number":247,"context_line":"        if LOCK:"},{"line_number":248,"context_line":"            LOCK.acquire()"},{"line_number":249,"context_line":"            logging._lock \u003d LOCK"},{"line_number":250,"context_line":"            LOCK \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_05223552","line":247,"range":{"start_line":247,"start_character":15,"end_line":247,"end_character":16},"in_reply_to":"fa0719c6_4d1739ed","updated":"2016-03-22 16:59:30.000000000","message":"Done","commit_id":"363d0292fca73e2162aa5c98e6939538119145c0"},{"author":{"_account_id":7579,"name":"jan grant","email":"jan.grant@hpe.com","username":"jang"},"change_message_id":"74bceee04a7cc8b6c930bfd49d12ace72fcfd12e","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            LOCK.acquire()"},{"line_number":249,"context_line":"            logging._lock \u003d LOCK"},{"line_number":250,"context_line":"            LOCK \u003d None"},{"line_number":251,"context_line":"            logging._lock.release()"},{"line_number":252,"context_line":"        _load_log_config(conf.log_config_append)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_cdb4e9d2","line":251,"range":{"start_line":251,"start_character":0,"end_line":251,"end_character":12},"updated":"2016-03-22 16:18:45.000000000","message":"Also: are we certain that the logging lock can\u0027t already be acquired at the point where this is run?\n\n(It shouldn\u0027t matter if it is as long as the use of that _lock is wrapped by \"with _lock:\")","commit_id":"363d0292fca73e2162aa5c98e6939538119145c0"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"eccc4736b3cc6f1f540f539518b3ead58a28ec7c","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            LOCK.acquire()"},{"line_number":249,"context_line":"            logging._lock \u003d LOCK"},{"line_number":250,"context_line":"            LOCK \u003d None"},{"line_number":251,"context_line":"            logging._lock.release()"},{"line_number":252,"context_line":"        _load_log_config(conf.log_config_append)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_2573f94e","line":251,"range":{"start_line":251,"start_character":0,"end_line":251,"end_character":12},"in_reply_to":"fa0719c6_cdb4e9d2","updated":"2016-03-22 16:59:30.000000000","message":"Pretty sure. The lock only protects the logging config, which is changed by methods like logging.dictConfig. If a service using oslo.log is calling those methods itself, they could have a problem, to which I say \"don\u0027t do that then\". The only case I\u0027m worried about is someone spamming SIGHUP but I think only one greenthread will run this method at a time (cooperative yielding).","commit_id":"363d0292fca73e2162aa5c98e6939538119145c0"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"9f7d1a05ad3e9b800dadb26b2abea3f41ab8fac9","unresolved":false,"context_lines":[{"line_number":63,"context_line":"logging.addLevelName(TRACE, \u0027TRACE\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"LOCK \u003d None"},{"line_number":67,"context_line":"try:"},{"line_number":68,"context_line":"    import eventlet"},{"line_number":69,"context_line":"    LOCK \u003d eventlet.green.threading.RLock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_e8186dd5","line":66,"updated":"2016-03-23 20:09:42.000000000","message":"This should be _LOCK to show that it is meant to be private.","commit_id":"d5315d2345c7f86c17d26052f8f0830478915d68"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"707a8dbdb0656fb47de2925eb420f7bd1e898689","unresolved":false,"context_lines":[{"line_number":63,"context_line":"logging.addLevelName(TRACE, \u0027TRACE\u0027)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"LOCK \u003d None"},{"line_number":67,"context_line":"try:"},{"line_number":68,"context_line":"    import eventlet"},{"line_number":69,"context_line":"    LOCK \u003d eventlet.green.threading.RLock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_a4c30437","line":66,"in_reply_to":"fa0719c6_e8186dd5","updated":"2016-04-01 14:24:22.000000000","message":"Done","commit_id":"d5315d2345c7f86c17d26052f8f0830478915d68"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"9f7d1a05ad3e9b800dadb26b2abea3f41ab8fac9","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                and eventlet.patcher.is_monkey_patched(\u0027thread\u0027)):"},{"line_number":251,"context_line":"            # Must be greened so we can do this without risk of thread"},{"line_number":252,"context_line":"            # interruption."},{"line_number":253,"context_line":"            logging._lock \u003d LOCK"},{"line_number":254,"context_line":"            LOCK \u003d None"},{"line_number":255,"context_line":"        _load_log_config(conf.log_config_append)"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_48335962","line":253,"updated":"2016-03-23 20:09:42.000000000","message":"Shouldn\u0027t we check what logging._lock already is, in case by some chance eventlet was configured correctly before logging was?","commit_id":"d5315d2345c7f86c17d26052f8f0830478915d68"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"707a8dbdb0656fb47de2925eb420f7bd1e898689","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                and eventlet.patcher.is_monkey_patched(\u0027thread\u0027)):"},{"line_number":251,"context_line":"            # Must be greened so we can do this without risk of thread"},{"line_number":252,"context_line":"            # interruption."},{"line_number":253,"context_line":"            logging._lock \u003d LOCK"},{"line_number":254,"context_line":"            LOCK \u003d None"},{"line_number":255,"context_line":"        _load_log_config(conf.log_config_append)"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba0121b8_e4dfbc0a","line":253,"in_reply_to":"fa0719c6_48335962","updated":"2016-04-01 14:24:22.000000000","message":"Done","commit_id":"d5315d2345c7f86c17d26052f8f0830478915d68"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"059f8a5e29a8f90624a295761b49681039ef5e39","unresolved":false,"context_lines":[{"line_number":66,"context_line":"_LOCK \u003d None"},{"line_number":67,"context_line":"try:"},{"line_number":68,"context_line":"    import eventlet"},{"line_number":69,"context_line":"    _LOCK \u003d eventlet.green.threading.RLock()"},{"line_number":70,"context_line":"except ImportError:  # nosec"},{"line_number":71,"context_line":"    pass"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba0121b8_947ee3e1","line":69,"updated":"2016-04-01 17:46:53.000000000","message":"We don\u0027t want to always do this because not all applications using oslo.log use eventlet. We should provide an API to do it, and we should explicitly call the API from the applications that use eventlet.","commit_id":"25f55945a27bbbb2c45f349e0292fc7c8e7cacb3"}]}
