)]}'
{"oslo_log/_options.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"cab3a275920ca3c649cd093e2c26725a9dcbe794","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                     \u0027will open a new log file with specified path \u0027"},{"line_number":71,"context_line":"                     \u0027instantaneously. It makes sense only if log-file option \u0027"},{"line_number":72,"context_line":"                     \u0027is specified.\u0027),"},{"line_number":73,"context_line":"    cfg.BoolOpt(\u0027use-syslog\u0027,"},{"line_number":74,"context_line":"                default\u003dFalse,"},{"line_number":75,"context_line":"                help\u003d\u0027Use syslog for logging. \u0027"},{"line_number":76,"context_line":"                     \u0027Existing syslog format is DEPRECATED \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_0839e1d6","line":73,"updated":"2015-08-31 18:08:42.000000000","message":"Also is this supposed to mention that it only works on linux?","commit_id":"0cf877ab1f570f0bb50b3103941c9560b874c430"}],"oslo_log/handlers.py":[{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"4d9be7f7916260a17f9ca83162a454d1638961f2","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \"\"\"Eventlet friendly ThreadedNotifier"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        EventletFriendlyThreadedNotifier contains additional time.sleep()"},{"line_number":140,"context_line":"        call insude loop to allow switching to other thread when eventlet"},{"line_number":141,"context_line":"        is used."},{"line_number":142,"context_line":"        It can be used with eventlet and native threads as well."},{"line_number":143,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_121e15bb","line":140,"updated":"2015-08-20 11:01:53.000000000","message":"s/insude/inside/","commit_id":"ea6cb09bc784ccf21d0e3d0f43a58bdb2d5e6fb2"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"95f8d09d9cad5dd8425a7f94c4dd524d5abb2fca","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        EventletFriendlyThreadedNotifier contains additional time.sleep()"},{"line_number":140,"context_line":"        call insude loop to allow switching to other thread when eventlet"},{"line_number":141,"context_line":"        is used."},{"line_number":142,"context_line":"        It can be used with eventlet and native threads as well."},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        while not self._stop_event.isSet():"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_443eebc1","line":142,"updated":"2015-08-31 16:15:09.000000000","message":"If this is true, why not just call this class \u0027ThreadedNotifier\u0027 ?","commit_id":"0cf877ab1f570f0bb50b3103941c9560b874c430"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"41e668a737f3489ad7ee0c84310852bc0426256b","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        EventletFriendlyThreadedNotifier contains additional time.sleep()"},{"line_number":140,"context_line":"        call insude loop to allow switching to other thread when eventlet"},{"line_number":141,"context_line":"        is used."},{"line_number":142,"context_line":"        It can be used with eventlet and native threads as well."},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        while not self._stop_event.isSet():"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_9fda0d16","line":142,"in_reply_to":"da20952f_443eebc1","updated":"2015-08-31 17:14:12.000000000","message":"Original ThreadedNotifier uses \u0027poll\u0027 system call for selecting events. Unfortunately eventlet doesn\u0027t provide monkey-patched \u0027poll\u0027 function. So when eventlet threads are used switching will not be caused. That\u0027s why using original ThreadedNotifier in openstack is bad idea. To avoid that problem I used overriding of loop() method. The key difference is additional \u0027time.sleep(0)\u0027 call. This call is monkey patched in eventlet and it allows green threads switching.","commit_id":"0cf877ab1f570f0bb50b3103941c9560b874c430"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"19f6d2cb1538cf458c2a354eb84454fe44f781b2","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        EventletFriendlyThreadedNotifier contains additional time.sleep()"},{"line_number":140,"context_line":"        call insude loop to allow switching to other thread when eventlet"},{"line_number":141,"context_line":"        is used."},{"line_number":142,"context_line":"        It can be used with eventlet and native threads as well."},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        while not self._stop_event.isSet():"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_850abc88","line":142,"in_reply_to":"da20952f_9fda0d16","updated":"2015-08-31 18:02:12.000000000","message":"Ya, I\u0027m more of just wondering if there is a better name for this class,\n\nIf \u0027It can be used with eventlet and native threads as well.\u0027 then it doesn\u0027t seem like this should be named \u0027EventletThreadedNotifier\u0027 because as the last statement just said it can be used without eventlet, so maybe a better class name can be selected?","commit_id":"0cf877ab1f570f0bb50b3103941c9560b874c430"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"95f8d09d9cad5dd8425a7f94c4dd524d5abb2fca","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        It can be used with eventlet and native threads as well."},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        while not self._stop_event.isSet():"},{"line_number":146,"context_line":"            self.process_events()"},{"line_number":147,"context_line":"            time.sleep(0)"},{"line_number":148,"context_line":"            ref_time \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_2446574f","line":145,"updated":"2015-08-31 16:15:09.000000000","message":"Just a nit, but i prefer keeping one style of function call notation, there is a is_set() that can be used that matches the rest of the calling conventions I typically see in openstack...","commit_id":"0cf877ab1f570f0bb50b3103941c9560b874c430"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"41e668a737f3489ad7ee0c84310852bc0426256b","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        It can be used with eventlet and native threads as well."},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        while not self._stop_event.isSet():"},{"line_number":146,"context_line":"            self.process_events()"},{"line_number":147,"context_line":"            time.sleep(0)"},{"line_number":148,"context_line":"            ref_time \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_bf1a71c4","line":145,"in_reply_to":"da20952f_2446574f","updated":"2015-08-31 17:14:12.000000000","message":"Will be done","commit_id":"0cf877ab1f570f0bb50b3103941c9560b874c430"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"19f6d2cb1538cf458c2a354eb84454fe44f781b2","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                             watched_file\u003dself._log_file)"},{"line_number":166,"context_line":"        notifier \u003d EventletThreadedNotifier(watch_manager,"},{"line_number":167,"context_line":"                                            default_proc_fun\u003dhandler,"},{"line_number":168,"context_line":"                                            read_freq\u003d1, timeout\u003d500)"},{"line_number":169,"context_line":"        notifier.daemon \u003d True"},{"line_number":170,"context_line":"        watch_manager.add_watch(self._log_dir, mask)"},{"line_number":171,"context_line":"        notifier.start()"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_85187cd4","line":168,"updated":"2015-08-31 18:02:12.000000000","message":"Should these constants be class constants with docstrings, seems like that might be useful?","commit_id":"0cf877ab1f570f0bb50b3103941c9560b874c430"}]}
