)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d0570e63911089a213b9ab6b9e49d6865f7d516e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"context finishes without rising TimerTimeout."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I1f33535b201d49b875437bcc3397fcb465118064"},{"line_number":18,"context_line":"Related-Bug: #1680183"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9fb8cfa7_ec7a9e86","line":18,"updated":"2019-06-04 07:55:54.000000000","message":"Can You explain how this path is related to the related bug? And how this timer class will be used later.","commit_id":"a5f096f2b521a5c21543842d45d73c9444ca7745"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c8dbf1bcddc31d00907f4830bf2bcaef102a34ed","unresolved":false,"context_lines":[{"line_number":15,"context_line":"context finishes without rising TimerTimeout."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I1f33535b201d49b875437bcc3397fcb465118064"},{"line_number":18,"context_line":"Related-Bug: #1680183"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9fb8cfa7_1241323a","line":18,"in_reply_to":"9fb8cfa7_ec7a9e86","updated":"2019-06-05 09:36:21.000000000","message":"Yes, I\u0027ll explain this in the commit message. Basically what I\u0027m doing is replacing the shell \"ip monitor\" command with a Pyroute2 monitor. The keepalived monitor will spawn a thread, using the pyroute2 \"ip monitor\" implementation, instead of a new process to execute the shell command \"ip monitor\". This will help to start and stop the keepalived monitor process.","commit_id":"a5f096f2b521a5c21543842d45d73c9444ca7745"}],"neutron/common/utils.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d2f985dfd8b63654791f8e6cafaf6fcc2a987e09","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class TimerTimeout(n_exc.NeutronException):"},{"line_number":66,"context_line":"    message \u003d _(\u0027Timer timeout expired, %(timeout)s seconds\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class LockWithTimer(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_09d45e47","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":39},"updated":"2019-05-24 19:23:42.000000000","message":"s/expired after","commit_id":"dc00c983a14cc00bab4b7f011caf025223c95ae3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d2f985dfd8b63654791f8e6cafaf6fcc2a987e09","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class TimerTimeout(n_exc.NeutronException):"},{"line_number":66,"context_line":"    message \u003d _(\u0027Timer timeout expired, %(timeout)s seconds\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class LockWithTimer(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_89de0e6b","line":66,"range":{"start_line":66,"start_character":52,"end_line":66,"end_character":59},"updated":"2019-05-24 19:23:42.000000000","message":"s/second(s)","commit_id":"dc00c983a14cc00bab4b7f011caf025223c95ae3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"186af0bf16245362b7776d0193ccd4ad548ff03b","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class TimerTimeout(n_exc.NeutronException):"},{"line_number":66,"context_line":"    message \u003d _(\u0027Timer timeout expired, %(timeout)s seconds\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class LockWithTimer(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_45beabd5","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":39},"in_reply_to":"bfb3d3c7_09d45e47","updated":"2019-05-27 09:15:04.000000000","message":"Done","commit_id":"dc00c983a14cc00bab4b7f011caf025223c95ae3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"186af0bf16245362b7776d0193ccd4ad548ff03b","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class TimerTimeout(n_exc.NeutronException):"},{"line_number":66,"context_line":"    message \u003d _(\u0027Timer timeout expired, %(timeout)s seconds\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class LockWithTimer(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_05b433f1","line":66,"range":{"start_line":66,"start_character":52,"end_line":66,"end_character":59},"in_reply_to":"bfb3d3c7_89de0e6b","updated":"2019-05-27 09:15:04.000000000","message":"Done","commit_id":"dc00c983a14cc00bab4b7f011caf025223c95ae3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d2f985dfd8b63654791f8e6cafaf6fcc2a987e09","unresolved":false,"context_lines":[{"line_number":909,"context_line":"    finishes without rising TimerTimeout."},{"line_number":910,"context_line":"    \"\"\""},{"line_number":911,"context_line":"    def __init__(self, timeout\u003dNone, raise_exception\u003dTrue):"},{"line_number":912,"context_line":"        super(Timer, self).__init__()"},{"line_number":913,"context_line":"        self.start \u003d self.delta \u003d None"},{"line_number":914,"context_line":"        self._timeout \u003d int(timeout) if timeout else None"},{"line_number":915,"context_line":"        self._timeout_flag \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_49b6d640","line":912,"updated":"2019-05-24 19:23:42.000000000","message":"Do you need this?  Timer is an object.","commit_id":"dc00c983a14cc00bab4b7f011caf025223c95ae3"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"186af0bf16245362b7776d0193ccd4ad548ff03b","unresolved":false,"context_lines":[{"line_number":909,"context_line":"    finishes without rising TimerTimeout."},{"line_number":910,"context_line":"    \"\"\""},{"line_number":911,"context_line":"    def __init__(self, timeout\u003dNone, raise_exception\u003dTrue):"},{"line_number":912,"context_line":"        super(Timer, self).__init__()"},{"line_number":913,"context_line":"        self.start \u003d self.delta \u003d None"},{"line_number":914,"context_line":"        self._timeout \u003d int(timeout) if timeout else None"},{"line_number":915,"context_line":"        self._timeout_flag \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_c57ffb12","line":912,"in_reply_to":"bfb3d3c7_49b6d640","updated":"2019-05-27 09:15:04.000000000","message":"Although probably Timer is not going to be inherited by other class, I usually prefer to call super to avoid problems with MRO.\n\nhttps://www.datacamp.com/community/tutorials/super-multiple-inheritance-diamond-problem","commit_id":"dc00c983a14cc00bab4b7f011caf025223c95ae3"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d0570e63911089a213b9ab6b9e49d6865f7d516e","unresolved":false,"context_lines":[{"line_number":953,"context_line":"    def __del__(self):"},{"line_number":954,"context_line":"        signal.alarm(0)"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    def delta_time_sec(self):"},{"line_number":957,"context_line":"        return (datetime.datetime.now() - self.start).total_seconds()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_4c3baad0","line":956,"updated":"2019-06-04 07:55:54.000000000","message":"nit: this could be property, no?","commit_id":"a5f096f2b521a5c21543842d45d73c9444ca7745"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c8dbf1bcddc31d00907f4830bf2bcaef102a34ed","unresolved":false,"context_lines":[{"line_number":953,"context_line":"    def __del__(self):"},{"line_number":954,"context_line":"        signal.alarm(0)"},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    def delta_time_sec(self):"},{"line_number":957,"context_line":"        return (datetime.datetime.now() - self.start).total_seconds()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fb8cfa7_b2d62627","line":956,"in_reply_to":"9fb8cfa7_4c3baad0","updated":"2019-06-05 09:36:21.000000000","message":"Done","commit_id":"a5f096f2b521a5c21543842d45d73c9444ca7745"}]}
