)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4cb9cb0dc83fabf3d4ea47dcfb2143c2dc6b9be7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Enable event-alarm timeout"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New timeout parameter enabling event-alarm become \u0027ok\u0027 if no desired"},{"line_number":10,"context_line":"event come after specified timeout"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0b8a678360d69ece119865960335d0ac3096e91c"},{"line_number":13,"context_line":"Implements: blueprint event-alarm-timeout"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a89bdaa_9ffe6fac","line":10,"updated":"2016-09-07 12:31:20.000000000","message":"I don\u0027t see the point of having to send events to do that. To me it\u0027s just a rule that you can compute at certain time using the info in the database.\n\nThe whole process spawning and stuff looks… bloated?","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8c23368a8a605f026a4d9dd5d1d64478a61805ec","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Enable event-alarm timeout"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"New timeout parameter enabling event-alarm become \u0027ok\u0027 if no desired"},{"line_number":10,"context_line":"event come after specified timeout"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0b8a678360d69ece119865960335d0ac3096e91c"},{"line_number":13,"context_line":"Implements: blueprint event-alarm-timeout"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9a89bdaa_1cecff28","line":10,"in_reply_to":"9a89bdaa_9ffe6fac","updated":"2016-09-08 07:13:20.000000000","message":"event evaluator is different from threshold one, as no certain time available for checking. It\u0027s driven by event, so we can\u0027t handle timeout if no other event comes.\n\nFurthermore, sending event is good for synchronization.","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"}],"aodh/api/controllers/v2/alarm_rules/event.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"669aa0e1bd7a184f1f24b7e52e1e3433efad1950","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"The query to find the event (default is [])\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    timeout \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"},{"line_number":36,"context_line":"    \"The timeout that alarm become OK if not fired\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, event_type\u003dNone, query\u003dNone, timeout\u003d0):"},{"line_number":39,"context_line":"        event_type \u003d event_type or \u0027*\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_066f5893","line":36,"updated":"2016-01-26 16:31:14.000000000","message":"alarm turns OK if not received? i thought the timeout was in scenario where we don\u0027t receive event in specified time, it will alarm.","commit_id":"2cedc826555b65c0ba341f24db61043911cfc928"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"aa5fad2d3040b39b8beee94a7a6d047d6c73a5d9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"The query to find the event (default is [])\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    timeout \u003d wsme.wsattr(wtypes.IntegerType(minimum\u003d0), default\u003d0)"},{"line_number":36,"context_line":"    \"The timeout that alarm become OK if not fired\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, event_type\u003dNone, query\u003dNone, timeout\u003d0):"},{"line_number":39,"context_line":"        event_type \u003d event_type or \u0027*\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_6f6db3cb","line":36,"in_reply_to":"9a68dd71_066f5893","updated":"2016-01-27 01:36:24.000000000","message":"Inherit current threshold alarm status:\ninsufficient data: no enough data to judge the status\nalarm: be alarmed according to data\nok: be not-alarmed according to data\n\nOK is just \"Not Alarmed\", although it\u0027s a bit misleading. I\u0027d like to leave it untouched and figure out a accurate status name in future. Is it okay?","commit_id":"2cedc826555b65c0ba341f24db61043911cfc928"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"08d5c3f8dcb0876e6c33840ea7dc57ddb331551f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def __init__(self, event_type\u003dNone, query\u003dNone, timeout\u003d0):"},{"line_number":39,"context_line":"        event_type \u003d event_type or \u0027*\u0027"},{"line_number":40,"context_line":"        query \u003d [base.Query(**q) for q in query or []]"},{"line_number":41,"context_line":"        timeout \u003d timeout"},{"line_number":42,"context_line":"        super(AlarmEventRule, self).__init__(event_type\u003devent_type,"},{"line_number":43,"context_line":"                                             query\u003dquery,"},{"line_number":44,"context_line":"                                             timeout\u003dtimeout)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_e9ba2c71","line":41,"updated":"2016-01-26 11:00:50.000000000","message":"You mean self.timeout?","commit_id":"2cedc826555b65c0ba341f24db61043911cfc928"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"aa5fad2d3040b39b8beee94a7a6d047d6c73a5d9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def __init__(self, event_type\u003dNone, query\u003dNone, timeout\u003d0):"},{"line_number":39,"context_line":"        event_type \u003d event_type or \u0027*\u0027"},{"line_number":40,"context_line":"        query \u003d [base.Query(**q) for q in query or []]"},{"line_number":41,"context_line":"        timeout \u003d timeout"},{"line_number":42,"context_line":"        super(AlarmEventRule, self).__init__(event_type\u003devent_type,"},{"line_number":43,"context_line":"                                             query\u003dquery,"},{"line_number":44,"context_line":"                                             timeout\u003dtimeout)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_ef5443cb","line":41,"in_reply_to":"9a68dd71_e9ba2c71","updated":"2016-01-27 01:36:24.000000000","message":"It should be some parameter check here, like\ntimeout \u003d timeout if timeout \u003e 0 else 0","commit_id":"2cedc826555b65c0ba341f24db61043911cfc928"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e2b56bfe7de0cb593e67fe8eff4584f4be35b029","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        event_type \u003d event_type or \u0027*\u0027"},{"line_number":40,"context_line":"        query \u003d [base.Query(**q) for q in query or []]"},{"line_number":41,"context_line":"        if timeout \u003c 0:"},{"line_number":42,"context_line":"            timeout \u003d 0"},{"line_number":43,"context_line":"        super(AlarmEventRule, self).__init__(event_type\u003devent_type,"},{"line_number":44,"context_line":"                                             query\u003dquery,"},{"line_number":45,"context_line":"                                             timeout\u003dtimeout)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_eee433e1","line":42,"updated":"2016-08-29 17:46:15.000000000","message":"we should drop this i think. we already haev a check above for minimum so we should let it raise the error.","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"5daefff466f94d81605f8ba3917e44a1bc95813e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        event_type \u003d event_type or \u0027*\u0027"},{"line_number":40,"context_line":"        query \u003d [base.Query(**q) for q in query or []]"},{"line_number":41,"context_line":"        if timeout \u003c 0:"},{"line_number":42,"context_line":"            timeout \u003d 0"},{"line_number":43,"context_line":"        super(AlarmEventRule, self).__init__(event_type\u003devent_type,"},{"line_number":44,"context_line":"                                             query\u003dquery,"},{"line_number":45,"context_line":"                                             timeout\u003dtimeout)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_9902886e","line":42,"in_reply_to":"fa7ab95a_eee433e1","updated":"2016-08-31 14:47:06.000000000","message":"ok","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"}],"aodh/api/controllers/v2/alarms.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"08d5c3f8dcb0876e6c33840ea7dc57ddb331551f","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    notification \u003d \"alarm.%s\" % notification"},{"line_number":487,"context_line":"    transport \u003d messaging.get_transport(pecan.request.cfg)"},{"line_number":488,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.api\","},{"line_number":489,"context_line":"                                      driver\u003d\"messagingv2\")"},{"line_number":490,"context_line":"    # FIXME(sileht): perhaps we need to copy some infos from the"},{"line_number":491,"context_line":"    # pecan request headers like nova does"},{"line_number":492,"context_line":"    notifier.info({}, notification, payload)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_49a6d854","line":489,"updated":"2016-01-26 11:00:50.000000000","message":"I find it odd to have the driver specified here.","commit_id":"2cedc826555b65c0ba341f24db61043911cfc928"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"669aa0e1bd7a184f1f24b7e52e1e3433efad1950","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    notification \u003d \"alarm.%s\" % notification"},{"line_number":487,"context_line":"    transport \u003d messaging.get_transport(pecan.request.cfg)"},{"line_number":488,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.api\","},{"line_number":489,"context_line":"                                      driver\u003d\"messagingv2\")"},{"line_number":490,"context_line":"    # FIXME(sileht): perhaps we need to copy some infos from the"},{"line_number":491,"context_line":"    # pecan request headers like nova does"},{"line_number":492,"context_line":"    notifier.info({}, notification, payload)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_c6b5c031","line":489,"in_reply_to":"9a68dd71_49a6d854","updated":"2016-01-26 16:31:14.000000000","message":"maybe we should send new alarms to it\u0027s own queue. that way the alarm.create isn\u0027t backed up behind events from ceilometer.","commit_id":"2cedc826555b65c0ba341f24db61043911cfc928"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"aa5fad2d3040b39b8beee94a7a6d047d6c73a5d9","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    notification \u003d \"alarm.%s\" % notification"},{"line_number":487,"context_line":"    transport \u003d messaging.get_transport(pecan.request.cfg)"},{"line_number":488,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.api\","},{"line_number":489,"context_line":"                                      driver\u003d\"messagingv2\")"},{"line_number":490,"context_line":"    # FIXME(sileht): perhaps we need to copy some infos from the"},{"line_number":491,"context_line":"    # pecan request headers like nova does"},{"line_number":492,"context_line":"    notifier.info({}, notification, payload)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_cf2ffff4","line":489,"in_reply_to":"9a68dd71_c6b5c031","updated":"2016-01-27 01:36:24.000000000","message":"Do you mean partition? Different alarms has its own evaluator listening to one topic attaching to related alalm?","commit_id":"2cedc826555b65c0ba341f24db61043911cfc928"}],"aodh/evaluator/event.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e2b56bfe7de0cb593e67fe8eff4584f4be35b029","unresolved":false,"context_lines":[{"line_number":155,"context_line":"def _send_notification(event, payload, timeout\u003d0):"},{"line_number":156,"context_line":"    if timeout \u003e 0:"},{"line_number":157,"context_line":"        time.sleep(timeout)"},{"line_number":158,"context_line":"    notification \u003d event.replace(\" \", \"_\")"},{"line_number":159,"context_line":"    notification \u003d \"alarm.%s\" % notification"},{"line_number":160,"context_line":"    transport \u003d messaging.get_transport(cfg.CONF)"},{"line_number":161,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.evaluator\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_7132c6f3","line":158,"updated":"2016-08-29 17:46:15.000000000","message":"is this suppose to do something? we pass in \u0027timeout.end\u0027 only","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"5daefff466f94d81605f8ba3917e44a1bc95813e","unresolved":false,"context_lines":[{"line_number":155,"context_line":"def _send_notification(event, payload, timeout\u003d0):"},{"line_number":156,"context_line":"    if timeout \u003e 0:"},{"line_number":157,"context_line":"        time.sleep(timeout)"},{"line_number":158,"context_line":"    notification \u003d event.replace(\" \", \"_\")"},{"line_number":159,"context_line":"    notification \u003d \"alarm.%s\" % notification"},{"line_number":160,"context_line":"    transport \u003d messaging.get_transport(cfg.CONF)"},{"line_number":161,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.evaluator\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_d4c69548","line":158,"in_reply_to":"fa7ab95a_7132c6f3","updated":"2016-08-31 14:47:06.000000000","message":"We can remove this.","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e2b56bfe7de0cb593e67fe8eff4584f4be35b029","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    notification \u003d event.replace(\" \", \"_\")"},{"line_number":159,"context_line":"    notification \u003d \"alarm.%s\" % notification"},{"line_number":160,"context_line":"    transport \u003d messaging.get_transport(cfg.CONF)"},{"line_number":161,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.evaluator\")"},{"line_number":162,"context_line":"    notifier.info({}, notification, payload)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_31b11e48","line":161,"updated":"2016-08-29 17:46:15.000000000","message":"i don\u0027t think we should be getting notifier every single notificaiton,.","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"5daefff466f94d81605f8ba3917e44a1bc95813e","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    notification \u003d event.replace(\" \", \"_\")"},{"line_number":159,"context_line":"    notification \u003d \"alarm.%s\" % notification"},{"line_number":160,"context_line":"    transport \u003d messaging.get_transport(cfg.CONF)"},{"line_number":161,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.evaluator\")"},{"line_number":162,"context_line":"    notifier.info({}, notification, payload)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_2f5daaec","line":161,"in_reply_to":"fa7ab95a_31b11e48","updated":"2016-08-31 14:47:06.000000000","message":"I\u0027ll try to make some cache here.","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ae597edb429574bee2ee7d832879694c807839f1","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"def _send_notification(event, payload, timeout\u003d0):"},{"line_number":156,"context_line":"    if timeout \u003e 0:"},{"line_number":157,"context_line":"        time.sleep(timeout)"},{"line_number":158,"context_line":"    notification \u003d \"alarm.%s\" % event"},{"line_number":159,"context_line":"    transport \u003d messaging.get_transport(cfg.CONF)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_027eb1ad","line":156,"updated":"2016-09-06 19:58:55.000000000","message":"can timeout be less than 0? we already check this when creating. https://review.openstack.org/#/c/272028/4/aodh/api/controllers/v2/alarms.py","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4cb9cb0dc83fabf3d4ea47dcfb2143c2dc6b9be7","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    if timeout \u003e 0:"},{"line_number":157,"context_line":"        time.sleep(timeout)"},{"line_number":158,"context_line":"    notification \u003d \"alarm.%s\" % event"},{"line_number":159,"context_line":"    transport \u003d messaging.get_transport(cfg.CONF)"},{"line_number":160,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.evaluator\")"},{"line_number":161,"context_line":"    notifier.info({}, notification, payload)"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_9f182f77","line":159,"range":{"start_line":159,"start_character":40,"end_line":159,"end_character":48},"updated":"2016-09-07 12:31:20.000000000","message":"No way","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8c23368a8a605f026a4d9dd5d1d64478a61805ec","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    if timeout \u003e 0:"},{"line_number":157,"context_line":"        time.sleep(timeout)"},{"line_number":158,"context_line":"    notification \u003d \"alarm.%s\" % event"},{"line_number":159,"context_line":"    transport \u003d messaging.get_transport(cfg.CONF)"},{"line_number":160,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.evaluator\")"},{"line_number":161,"context_line":"    notifier.info({}, notification, payload)"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_53f75f58","line":159,"range":{"start_line":159,"start_character":40,"end_line":159,"end_character":48},"in_reply_to":"9a89bdaa_9f182f77","updated":"2016-09-08 07:13:20.000000000","message":"Why? Other way to get right transport?","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ae597edb429574bee2ee7d832879694c807839f1","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    notification \u003d \"alarm.%s\" % event"},{"line_number":159,"context_line":"    transport \u003d messaging.get_transport(cfg.CONF)"},{"line_number":160,"context_line":"    notifier \u003d messaging.get_notifier(transport, publisher_id\u003d\"aodh.evaluator\")"},{"line_number":161,"context_line":"    notifier.info({}, notification, payload)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"class EventAlarmEvaluator(evaluator.Evaluator):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_bd0fe42c","line":161,"updated":"2016-09-06 19:58:55.000000000","message":"it would be better if we didn\u0027t share the incoming msg queue with ipc queue. we should have a separate queue for internal alarm messages","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ae597edb429574bee2ee7d832879694c807839f1","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        super(EventAlarmEvaluator, self).__init__(conf)"},{"line_number":168,"context_line":"        self.caches \u003d {}"},{"line_number":169,"context_line":"        # check all event alarms for missing timeout when restart"},{"line_number":170,"context_line":"        self._check_alarms_timeout()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _check_alarms_timeout(self):"},{"line_number":173,"context_line":"        \"\"\"Check alarm status for event timeout handling when restart\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_3d51140f","line":170,"updated":"2016-09-06 19:58:55.000000000","message":"does this mean timeout alarms can only be evaluated if they were created before evaluator service was started? if so, that\u0027s pretty useless","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8c23368a8a605f026a4d9dd5d1d64478a61805ec","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        super(EventAlarmEvaluator, self).__init__(conf)"},{"line_number":168,"context_line":"        self.caches \u003d {}"},{"line_number":169,"context_line":"        # check all event alarms for missing timeout when restart"},{"line_number":170,"context_line":"        self._check_alarms_timeout()"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _check_alarms_timeout(self):"},{"line_number":173,"context_line":"        \"\"\"Check alarm status for event timeout handling when restart\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_13af972a","line":170,"in_reply_to":"9a89bdaa_3d51140f","updated":"2016-09-08 07:13:20.000000000","message":"No. This is just the recheck after evaluator service crash then restart.\nWhen evaluator service is running, new alarm with timeout will be well handled via \u0027alarm.timeout.*\u0027 event","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4cb9cb0dc83fabf3d4ea47dcfb2143c2dc6b9be7","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        \"\"\"Check alarm status for event timeout handling when restart\"\"\""},{"line_number":174,"context_line":"        for a in self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":175,"context_line":"                                               alarm_type\u003d\u0027event\u0027,"},{"line_number":176,"context_line":"                                               state\u003devaluator.UNKNOWN):"},{"line_number":177,"context_line":"            alarm \u003d Alarm(a)"},{"line_number":178,"context_line":"            timeout \u003d alarm.obj.rule[\u0027timeout\u0027]"},{"line_number":179,"context_line":"            if timeout \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_df7ab787","line":176,"updated":"2016-09-07 12:31:20.000000000","message":"Don\u0027t select alarms that have timeout \u003d 0 if you ignore them","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d2ec8892555b2e11c582e532a6a737813ed13b72","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        \"\"\"Check alarm status for event timeout handling when restart\"\"\""},{"line_number":174,"context_line":"        for a in self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":175,"context_line":"                                               alarm_type\u003d\u0027event\u0027,"},{"line_number":176,"context_line":"                                               state\u003devaluator.UNKNOWN):"},{"line_number":177,"context_line":"            alarm \u003d Alarm(a)"},{"line_number":178,"context_line":"            timeout \u003d alarm.obj.rule[\u0027timeout\u0027]"},{"line_number":179,"context_line":"            if timeout \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_11e697e7","line":176,"in_reply_to":"9a89bdaa_7366232b","updated":"2016-09-19 07:47:35.000000000","message":"timeout is inside alarm[\u0027event_rule\u0027][\u0027timeout\u0027], so it\u0027s hard to select from DB directly.","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8c23368a8a605f026a4d9dd5d1d64478a61805ec","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        \"\"\"Check alarm status for event timeout handling when restart\"\"\""},{"line_number":174,"context_line":"        for a in self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":175,"context_line":"                                               alarm_type\u003d\u0027event\u0027,"},{"line_number":176,"context_line":"                                               state\u003devaluator.UNKNOWN):"},{"line_number":177,"context_line":"            alarm \u003d Alarm(a)"},{"line_number":178,"context_line":"            timeout \u003d alarm.obj.rule[\u0027timeout\u0027]"},{"line_number":179,"context_line":"            if timeout \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_7366232b","line":176,"in_reply_to":"9a89bdaa_df7ab787","updated":"2016-09-08 07:13:20.000000000","message":"Good point!","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ae597edb429574bee2ee7d832879694c807839f1","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                                               state\u003devaluator.UNKNOWN):"},{"line_number":177,"context_line":"            alarm \u003d Alarm(a)"},{"line_number":178,"context_line":"            timeout \u003d alarm.obj.rule[\u0027timeout\u0027]"},{"line_number":179,"context_line":"            if timeout \u003c\u003d 0:"},{"line_number":180,"context_line":"                return"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"            elapse \u003d timeutils.delta_seconds(alarm.obj.timestamp,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_4299991e","line":179,"updated":"2016-09-06 19:58:55.000000000","message":"can alarm be","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ae597edb429574bee2ee7d832879694c807839f1","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                                               state\u003devaluator.UNKNOWN):"},{"line_number":177,"context_line":"            alarm \u003d Alarm(a)"},{"line_number":178,"context_line":"            timeout \u003d alarm.obj.rule[\u0027timeout\u0027]"},{"line_number":179,"context_line":"            if timeout \u003c\u003d 0:"},{"line_number":180,"context_line":"                return"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"            elapse \u003d timeutils.delta_seconds(alarm.obj.timestamp,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_a25fc53f","line":179,"updated":"2016-09-06 19:58:55.000000000","message":"can timeout be less than 0? we already check this when creating. https://review.openstack.org/#/c/272028/4/aodh/api/controllers/v2/alarms.py","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8c23368a8a605f026a4d9dd5d1d64478a61805ec","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                                               state\u003devaluator.UNKNOWN):"},{"line_number":177,"context_line":"            alarm \u003d Alarm(a)"},{"line_number":178,"context_line":"            timeout \u003d alarm.obj.rule[\u0027timeout\u0027]"},{"line_number":179,"context_line":"            if timeout \u003c\u003d 0:"},{"line_number":180,"context_line":"                return"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"            elapse \u003d timeutils.delta_seconds(alarm.obj.timestamp,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_33581b56","line":179,"in_reply_to":"9a89bdaa_a25fc53f","updated":"2016-09-08 07:13:20.000000000","message":"Just in case it will be called by others in future.\nI\u0027ll remove all the check for now.","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4cb9cb0dc83fabf3d4ea47dcfb2143c2dc6b9be7","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            if timeout \u003c\u003d 0:"},{"line_number":180,"context_line":"                return"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"            elapse \u003d timeutils.delta_seconds(alarm.obj.timestamp,"},{"line_number":183,"context_line":"                                             timeutils.utcnow())"},{"line_number":184,"context_line":"            wait \u003d timeout - elapse"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_5faea7e6","line":182,"updated":"2016-09-07 12:31:20.000000000","message":"don\u0027t use delta_seconds just use (t1 - t2).total_seconds()","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ae597edb429574bee2ee7d832879694c807839f1","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # skip all \u0027alarm.*\u0027 event except \u0027alarm.timeout.*\u0027"},{"line_number":214,"context_line":"            event_type \u003d event.obj[\u0027event_type\u0027]"},{"line_number":215,"context_line":"            if (fnmatch.fnmatch(event_type, \u0027alarm.*\u0027) and"},{"line_number":216,"context_line":"                    not fnmatch.fnmatch(event_type, \u0027alarm.timeout.*\u0027)):"},{"line_number":217,"context_line":"                continue"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_5d6fb8c4","line":215,"updated":"2016-09-06 19:58:55.000000000","message":"we should have separate queue for this i think.","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"4cb9cb0dc83fabf3d4ea47dcfb2143c2dc6b9be7","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # skip all \u0027alarm.*\u0027 event except \u0027alarm.timeout.*\u0027"},{"line_number":214,"context_line":"            event_type \u003d event.obj[\u0027event_type\u0027]"},{"line_number":215,"context_line":"            if (fnmatch.fnmatch(event_type, \u0027alarm.*\u0027) and"},{"line_number":216,"context_line":"                    not fnmatch.fnmatch(event_type, \u0027alarm.timeout.*\u0027)):"},{"line_number":217,"context_line":"                continue"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_5f4a2727","line":215,"in_reply_to":"9a89bdaa_5d6fb8c4","updated":"2016-09-07 12:31:20.000000000","message":"use fnmatch from oslo_utils","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8c23368a8a605f026a4d9dd5d1d64478a61805ec","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # skip all \u0027alarm.*\u0027 event except \u0027alarm.timeout.*\u0027"},{"line_number":214,"context_line":"            event_type \u003d event.obj[\u0027event_type\u0027]"},{"line_number":215,"context_line":"            if (fnmatch.fnmatch(event_type, \u0027alarm.*\u0027) and"},{"line_number":216,"context_line":"                    not fnmatch.fnmatch(event_type, \u0027alarm.timeout.*\u0027)):"},{"line_number":217,"context_line":"                continue"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_c6f56fed","line":215,"in_reply_to":"9a89bdaa_5d6fb8c4","updated":"2016-09-08 07:13:20.000000000","message":"you mean let \u0027alarm.timeout.*\u0027 event go into one different topic with one new endpoint?\n\nThe issue is:\n1.they share much of same source code, so separate queue probably produces duplicated code.\n2. one queue is critical for lock, so that each event comes in sequence to avoid race condition. E.g. required_event and \u0027alarm.timeout.end\u0027 come in 2 queues at almost same time, then the final alarm state depends which endpoint handle the event quickly. Not mentioned the tricky race condition issue between them.","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8c23368a8a605f026a4d9dd5d1d64478a61805ec","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"            # skip all \u0027alarm.*\u0027 event except \u0027alarm.timeout.*\u0027"},{"line_number":214,"context_line":"            event_type \u003d event.obj[\u0027event_type\u0027]"},{"line_number":215,"context_line":"            if (fnmatch.fnmatch(event_type, \u0027alarm.*\u0027) and"},{"line_number":216,"context_line":"                    not fnmatch.fnmatch(event_type, \u0027alarm.timeout.*\u0027)):"},{"line_number":217,"context_line":"                continue"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_b9008535","line":215,"in_reply_to":"9a89bdaa_5f4a2727","updated":"2016-09-08 07:13:20.000000000","message":"It is from oslo_utils.\n\"from oslo_utils import fnmatch\"","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ae597edb429574bee2ee7d832879694c807839f1","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                }"},{"line_number":227,"context_line":"                t \u003d mp.Process(target\u003d_send_notification,"},{"line_number":228,"context_line":"                               args\u003d(\"timeout.end\", payload,),"},{"line_number":229,"context_line":"                               kwargs\u003d{\u0027timeout\u0027: int(timeout)})"},{"line_number":230,"context_line":"                t.start()"},{"line_number":231,"context_line":"                continue"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_9d6940c1","line":229,"updated":"2016-09-06 19:58:55.000000000","message":"why does timeout have to int?","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"d2ec8892555b2e11c582e532a6a737813ed13b72","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                }"},{"line_number":227,"context_line":"                t \u003d mp.Process(target\u003d_send_notification,"},{"line_number":228,"context_line":"                               args\u003d(\"timeout.end\", payload,),"},{"line_number":229,"context_line":"                               kwargs\u003d{\u0027timeout\u0027: int(timeout)})"},{"line_number":230,"context_line":"                t.start()"},{"line_number":231,"context_line":"                continue"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8ec9b2_ca9714ea","line":229,"in_reply_to":"9a89bdaa_19bfb161","updated":"2016-09-19 07:47:35.000000000","message":"This timeout is string as it comes from notification payload, so need translation here.\ntimeout is defined as integer(seconds), which is good enough for our purpose.","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8c23368a8a605f026a4d9dd5d1d64478a61805ec","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                }"},{"line_number":227,"context_line":"                t \u003d mp.Process(target\u003d_send_notification,"},{"line_number":228,"context_line":"                               args\u003d(\"timeout.end\", payload,),"},{"line_number":229,"context_line":"                               kwargs\u003d{\u0027timeout\u0027: int(timeout)})"},{"line_number":230,"context_line":"                t.start()"},{"line_number":231,"context_line":"                continue"},{"line_number":232,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_19bfb161","line":229,"in_reply_to":"9a89bdaa_9d6940c1","updated":"2016-09-08 07:13:20.000000000","message":"Not necessarily. I\u0027ll remove this.","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"}],"aodh/messaging.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ae597edb429574bee2ee7d832879694c807839f1","unresolved":false,"context_lines":[{"line_number":60,"context_line":"def get_notifier(transport, publisher_id, cache\u003dTrue):"},{"line_number":61,"context_line":"    \"\"\"Return a configured oslo_messaging notifier.\"\"\""},{"line_number":62,"context_line":"    global NOTIFIERS"},{"line_number":63,"context_line":"    notifier \u003d NOTIFIERS.get(transport)"},{"line_number":64,"context_line":"    if not notifier:"},{"line_number":65,"context_line":"        notifier \u003d oslo_messaging.Notifier(transport, serializer\u003d_SERIALIZER)"},{"line_number":66,"context_line":"        if cache:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_01cebd59","line":63,"updated":"2016-09-06 19:58:55.000000000","message":"this seems unrelated, can we separate into another patch? why do we need to catch this anyways? seems like the service using notifier should keep it.","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"8c23368a8a605f026a4d9dd5d1d64478a61805ec","unresolved":false,"context_lines":[{"line_number":60,"context_line":"def get_notifier(transport, publisher_id, cache\u003dTrue):"},{"line_number":61,"context_line":"    \"\"\"Return a configured oslo_messaging notifier.\"\"\""},{"line_number":62,"context_line":"    global NOTIFIERS"},{"line_number":63,"context_line":"    notifier \u003d NOTIFIERS.get(transport)"},{"line_number":64,"context_line":"    if not notifier:"},{"line_number":65,"context_line":"        notifier \u003d oslo_messaging.Notifier(transport, serializer\u003d_SERIALIZER)"},{"line_number":66,"context_line":"        if cache:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_7946fd7b","line":63,"in_reply_to":"9a89bdaa_01cebd59","updated":"2016-09-08 07:13:20.000000000","message":"ok. Then I\u0027ll keep notifier in high level.","commit_id":"31c39ffa52a2870d758613b558e3b98b4fda7216"}],"aodh/tests/unit/evaluator/test_event.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e2b56bfe7de0cb593e67fe8eff4584f4be35b029","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @mock.patch.object(event_evaluator.EventAlarmEvaluator,"},{"line_number":36,"context_line":"                       \u0027_check_alarms_timeout\u0027)"},{"line_number":37,"context_line":"    def setUp(self, mock_check_timeout):"},{"line_number":38,"context_line":"        super(TestEventAlarmEvaluate, self).setUp()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_9172ea0f","line":37,"updated":"2016-08-29 17:46:15.000000000","message":"just set   \n\n  @mock.patch.object(event_evaluator.EventAlarmEvaluator,\n                     \u0027_check_alarms_timeout\u0027,\n                     mock.MagicMock())\n\nsince you don\u0027t use it ever.","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"5daefff466f94d81605f8ba3917e44a1bc95813e","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @mock.patch.object(event_evaluator.EventAlarmEvaluator,"},{"line_number":36,"context_line":"                       \u0027_check_alarms_timeout\u0027)"},{"line_number":37,"context_line":"    def setUp(self, mock_check_timeout):"},{"line_number":38,"context_line":"        super(TestEventAlarmEvaluate, self).setUp()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_4f8cae35","line":37,"in_reply_to":"fa7ab95a_9172ea0f","updated":"2016-08-31 14:47:06.000000000","message":"Done.","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"}],"devstack/plugin.sh":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e2b56bfe7de0cb593e67fe8eff4584f4be35b029","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    iniset_rpc_backend aodh $AODH_CONF"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    iniset $AODH_CONF oslo_messaging_notifications topics \"$AODH_NOTIFICATION_TOPICS\""},{"line_number":200,"context_line":"    iniset $AODH_CONF oslo_messaging_notifications driver \"messaging\""},{"line_number":201,"context_line":"    iniset $AODH_CONF DEFAULT debug \"$ENABLE_DEBUG_LOG_LEVEL\""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    if [[ -n \"$AODH_COORDINATION_URL\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":3,"id":"fa7ab95a_aec86b23","line":200,"updated":"2016-08-29 17:46:15.000000000","message":"messagingV2","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"},{"author":{"_account_id":11235,"name":"Edwin Zhai","email":"edwin.zhai@intel.com","username":"gzhai"},"change_message_id":"5daefff466f94d81605f8ba3917e44a1bc95813e","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    iniset_rpc_backend aodh $AODH_CONF"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    iniset $AODH_CONF oslo_messaging_notifications topics \"$AODH_NOTIFICATION_TOPICS\""},{"line_number":200,"context_line":"    iniset $AODH_CONF oslo_messaging_notifications driver \"messaging\""},{"line_number":201,"context_line":"    iniset $AODH_CONF DEFAULT debug \"$ENABLE_DEBUG_LOG_LEVEL\""},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    if [[ -n \"$AODH_COORDINATION_URL\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":3,"id":"fa7ab95a_4a03bc0d","line":200,"in_reply_to":"fa7ab95a_aec86b23","updated":"2016-08-31 14:47:06.000000000","message":"messagingv2 is recommended. But nova and other project still use messaging in devstack. I\u0027ll change to messageingv2.","commit_id":"396613f3b9b470a880ce3906c3217d6fb38ec92f"}]}
