)]}'
{"aodh/coordination.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"532ad67363d0bd213538c50a771fdc99c9373730","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                 default\u003d10.0,"},{"line_number":43,"context_line":"                 help\u003d\u0027Number of seconds between checks to see if group \u0027"},{"line_number":44,"context_line":"                      \u0027membership has changed\u0027),"},{"line_number":45,"context_line":"    cfg.IntOpt(\u0027retry_backoff\u0027,"},{"line_number":46,"context_line":"               default\u003d1,"},{"line_number":47,"context_line":"               help\u003d\u0027Retry backoff factor when retrying to connect with\u0027"},{"line_number":48,"context_line":"                    \u0027coordination backend\u0027),"},{"line_number":49,"context_line":"    cfg.IntOpt(\u0027max_retry_interval\u0027,"},{"line_number":50,"context_line":"               default\u003d30,"},{"line_number":51,"context_line":"               help\u003d\u0027Maximum number of seconds between retry to join \u0027"},{"line_number":52,"context_line":"                    \u0027partitioning group\u0027)"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_d24a255b","line":52,"range":{"start_line":45,"start_character":0,"end_line":52,"end_character":41},"updated":"2016-04-30 17:57:00.000000000","message":"worth for releasenotes IIUC","commit_id":"ba5bd4663ab37c3004121eb5bbdc1754475189ad"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"714727204959e519e5e612e483d82f7e989b593a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                 default\u003d10.0,"},{"line_number":43,"context_line":"                 help\u003d\u0027Number of seconds between checks to see if group \u0027"},{"line_number":44,"context_line":"                      \u0027membership has changed\u0027),"},{"line_number":45,"context_line":"    cfg.IntOpt(\u0027retry_backoff\u0027,"},{"line_number":46,"context_line":"               default\u003d1,"},{"line_number":47,"context_line":"               help\u003d\u0027Retry backoff factor when retrying to connect with\u0027"},{"line_number":48,"context_line":"                    \u0027coordination backend\u0027),"},{"line_number":49,"context_line":"    cfg.IntOpt(\u0027max_retry_interval\u0027,"},{"line_number":50,"context_line":"               default\u003d30,"},{"line_number":51,"context_line":"               help\u003d\u0027Maximum number of seconds between retry to join \u0027"},{"line_number":52,"context_line":"                    \u0027partitioning group\u0027)"},{"line_number":53,"context_line":"]"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_2f7cb0ea","line":52,"range":{"start_line":45,"start_character":0,"end_line":52,"end_character":41},"in_reply_to":"1a122d0e_d24a255b","updated":"2016-05-03 01:38:15.000000000","message":"yeah, will add it","commit_id":"ba5bd4663ab37c3004121eb5bbdc1754475189ad"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"532ad67363d0bd213538c50a771fdc99c9373730","unresolved":false,"context_lines":[{"line_number":56,"context_line":"class ErrorJoiningPartitioningGroup(Exception):"},{"line_number":57,"context_line":"    def __init__(self):"},{"line_number":58,"context_line":"        super(ErrorJoiningPartitioningGroup, self).__init__(_LE("},{"line_number":59,"context_line":"            \u0027Coordination join_group Error joining partitioning group\u0027))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class MemberNotInGroupError(Exception):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_f2592137","line":59,"range":{"start_line":59,"start_character":12,"end_line":59,"end_character":70},"updated":"2016-04-30 17:57:00.000000000","message":"if you can, please make it more readable","commit_id":"ba5bd4663ab37c3004121eb5bbdc1754475189ad"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"714727204959e519e5e612e483d82f7e989b593a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"class ErrorJoiningPartitioningGroup(Exception):"},{"line_number":57,"context_line":"    def __init__(self):"},{"line_number":58,"context_line":"        super(ErrorJoiningPartitioningGroup, self).__init__(_LE("},{"line_number":59,"context_line":"            \u0027Coordination join_group Error joining partitioning group\u0027))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class MemberNotInGroupError(Exception):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_cf6b7c1e","line":59,"range":{"start_line":59,"start_character":12,"end_line":59,"end_character":70},"in_reply_to":"1a122d0e_f2592137","updated":"2016-05-03 01:38:15.000000000","message":"Done","commit_id":"ba5bd4663ab37c3004121eb5bbdc1754475189ad"}],"aodh/evaluator/__init__.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"6f9a5e702a9457aa242f168e37201900115cc816","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        all_alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":285,"context_line":"                                                   exclude\u003ddict(type\u003d\u0027event\u0027))"},{"line_number":286,"context_line":"        all_alarms \u003d list(all_alarms)"},{"line_number":287,"context_line":"        all_alarm_ids \u003d [getattr(a, \u0027alarm_id\u0027) for a in all_alarms]"},{"line_number":288,"context_line":"        selected \u003d self.partition_coordinator.extract_my_subset("},{"line_number":289,"context_line":"            self.PARTITIONING_GROUP_NAME, all_alarm_ids)"},{"line_number":290,"context_line":"        filter_func \u003d lambda a: getattr(a, \u0027alarm_id\u0027) in selected"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_a92805e3","line":287,"updated":"2016-04-29 08:06:54.000000000","message":"I\u0027m confuse, some alarm don\u0027t have alarm_id ?","commit_id":"06400f1ab75bb451eaef600551ba4d291fbc4a51"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"9d5c600b24c7109e2c49256894f1b873f5839c72","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        all_alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":285,"context_line":"                                                   exclude\u003ddict(type\u003d\u0027event\u0027))"},{"line_number":286,"context_line":"        all_alarms \u003d list(all_alarms)"},{"line_number":287,"context_line":"        all_alarm_ids \u003d [getattr(a, \u0027alarm_id\u0027) for a in all_alarms]"},{"line_number":288,"context_line":"        selected \u003d self.partition_coordinator.extract_my_subset("},{"line_number":289,"context_line":"            self.PARTITIONING_GROUP_NAME, all_alarm_ids)"},{"line_number":290,"context_line":"        filter_func \u003d lambda a: getattr(a, \u0027alarm_id\u0027) in selected"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_ee279eb3","line":287,"in_reply_to":"1a122d0e_493cd1e0","updated":"2016-04-29 10:41:31.000000000","message":"So why we don\u0027t use a.alarm_id instead of getattr ?","commit_id":"06400f1ab75bb451eaef600551ba4d291fbc4a51"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"ae44ab94e37d5e53004d4640ab92b5a307d95634","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        all_alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":285,"context_line":"                                                   exclude\u003ddict(type\u003d\u0027event\u0027))"},{"line_number":286,"context_line":"        all_alarms \u003d list(all_alarms)"},{"line_number":287,"context_line":"        all_alarm_ids \u003d [getattr(a, \u0027alarm_id\u0027) for a in all_alarms]"},{"line_number":288,"context_line":"        selected \u003d self.partition_coordinator.extract_my_subset("},{"line_number":289,"context_line":"            self.PARTITIONING_GROUP_NAME, all_alarm_ids)"},{"line_number":290,"context_line":"        filter_func \u003d lambda a: getattr(a, \u0027alarm_id\u0027) in selected"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_493cd1e0","line":287,"in_reply_to":"1a122d0e_a92805e3","updated":"2016-04-29 08:21:15.000000000","message":"Hi sileht, no, this is to get a alarm ids list as input parameter of self.partition_coordinator.extract_my_subset(). previously, we input alarms list as parameter, the same alarm in difference service may be different alarm objects, that will cause alarms cannot be correctly distributed.","commit_id":"06400f1ab75bb451eaef600551ba4d291fbc4a51"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"76ee95b2238bfe0f60af7a7863715392516af1d1","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        all_alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":285,"context_line":"                                                   exclude\u003ddict(type\u003d\u0027event\u0027))"},{"line_number":286,"context_line":"        all_alarms \u003d list(all_alarms)"},{"line_number":287,"context_line":"        all_alarm_ids \u003d [getattr(a, \u0027alarm_id\u0027) for a in all_alarms]"},{"line_number":288,"context_line":"        selected \u003d self.partition_coordinator.extract_my_subset("},{"line_number":289,"context_line":"            self.PARTITIONING_GROUP_NAME, all_alarm_ids)"},{"line_number":290,"context_line":"        filter_func \u003d lambda a: getattr(a, \u0027alarm_id\u0027) in selected"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_ec0966de","line":287,"in_reply_to":"1a122d0e_ee279eb3","updated":"2016-04-29 12:38:55.000000000","message":"Hmm, I thought they are almost same :) will update.","commit_id":"06400f1ab75bb451eaef600551ba4d291fbc4a51"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"db2dc3870057695c34b8f5e8df98be80b2dd6ee3","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        # those alarms."},{"line_number":284,"context_line":"        all_alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":285,"context_line":"                                                   exclude\u003ddict(type\u003d\u0027event\u0027))"},{"line_number":286,"context_line":"        all_alarms \u003d list(all_alarms)"},{"line_number":287,"context_line":"        all_alarm_ids \u003d [a.alarm_id for a in all_alarms]"},{"line_number":288,"context_line":"        selected \u003d self.partition_coordinator.extract_my_subset("},{"line_number":289,"context_line":"            self.PARTITIONING_GROUP_NAME, all_alarm_ids)"},{"line_number":290,"context_line":"        filter_func \u003d lambda a: a.alarm_id in selected"},{"line_number":291,"context_line":"        return list(six.moves.filter(filter_func, all_alarms))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_7dd3f95f","line":291,"range":{"start_line":286,"start_character":8,"end_line":291,"end_character":62},"updated":"2016-05-03 08:17:12.000000000","message":"You now returns alarms objects rather than alarm id?\nHow does that work since there\u0027s no change in the code? Was it broken for… ever?","commit_id":"f8920b1af52f36417c5f8b65502ddac344cbc598"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"4c2e9515fe1aa47bb100f34b2261dfb4577149df","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        # those alarms."},{"line_number":284,"context_line":"        all_alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":285,"context_line":"                                                   exclude\u003ddict(type\u003d\u0027event\u0027))"},{"line_number":286,"context_line":"        all_alarms \u003d list(all_alarms)"},{"line_number":287,"context_line":"        all_alarm_ids \u003d [a.alarm_id for a in all_alarms]"},{"line_number":288,"context_line":"        selected \u003d self.partition_coordinator.extract_my_subset("},{"line_number":289,"context_line":"            self.PARTITIONING_GROUP_NAME, all_alarm_ids)"},{"line_number":290,"context_line":"        filter_func \u003d lambda a: a.alarm_id in selected"},{"line_number":291,"context_line":"        return list(six.moves.filter(filter_func, all_alarms))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_ddae8d80","line":291,"range":{"start_line":286,"start_character":8,"end_line":291,"end_character":62},"in_reply_to":"1a122d0e_7dd3f95f","updated":"2016-05-03 08:28:41.000000000","message":"no, I guess liusheng just wants to reduce the data amount when communicating with tooz, it returns alarm objects as previous, so it is actually an improvement not related to this patch, but it is a good idea","commit_id":"f8920b1af52f36417c5f8b65502ddac344cbc598"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"b41908571dea8857ac18d2658393780b916da809","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        # those alarms."},{"line_number":284,"context_line":"        all_alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":285,"context_line":"                                                   exclude\u003ddict(type\u003d\u0027event\u0027))"},{"line_number":286,"context_line":"        all_alarms \u003d list(all_alarms)"},{"line_number":287,"context_line":"        all_alarm_ids \u003d [a.alarm_id for a in all_alarms]"},{"line_number":288,"context_line":"        selected \u003d self.partition_coordinator.extract_my_subset("},{"line_number":289,"context_line":"            self.PARTITIONING_GROUP_NAME, all_alarm_ids)"},{"line_number":290,"context_line":"        filter_func \u003d lambda a: a.alarm_id in selected"},{"line_number":291,"context_line":"        return list(six.moves.filter(filter_func, all_alarms))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_3e4a17ad","line":291,"range":{"start_line":286,"start_character":8,"end_line":291,"end_character":62},"in_reply_to":"1a122d0e_9e5c0bf2","updated":"2016-05-03 10:58:04.000000000","message":"I admit you win :), you are carefully, it is just my fault, will modify it.","commit_id":"f8920b1af52f36417c5f8b65502ddac344cbc598"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"55646ed743f0d0660c61cfcc444f6d058cf97491","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        # those alarms."},{"line_number":284,"context_line":"        all_alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":285,"context_line":"                                                   exclude\u003ddict(type\u003d\u0027event\u0027))"},{"line_number":286,"context_line":"        all_alarms \u003d list(all_alarms)"},{"line_number":287,"context_line":"        all_alarm_ids \u003d [a.alarm_id for a in all_alarms]"},{"line_number":288,"context_line":"        selected \u003d self.partition_coordinator.extract_my_subset("},{"line_number":289,"context_line":"            self.PARTITIONING_GROUP_NAME, all_alarm_ids)"},{"line_number":290,"context_line":"        filter_func \u003d lambda a: a.alarm_id in selected"},{"line_number":291,"context_line":"        return list(six.moves.filter(filter_func, all_alarms))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_9e5c0bf2","line":291,"range":{"start_line":286,"start_character":8,"end_line":291,"end_character":62},"in_reply_to":"1a122d0e_a393b4ff","updated":"2016-05-03 10:19:42.000000000","message":"I\u0027m a fool, you\u0027re right\n\nand what is the reason to use six.moves.filter here? if we want to avoid a list in filter, then list it in outside, seems get no benefit, use builtin filter instead? teach me, thanks :)","commit_id":"f8920b1af52f36417c5f8b65502ddac344cbc598"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"406723f21e9168986257ba59e7797c44d48debde","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        # those alarms."},{"line_number":284,"context_line":"        all_alarms \u003d self._storage_conn.get_alarms(enabled\u003dTrue,"},{"line_number":285,"context_line":"                                                   exclude\u003ddict(type\u003d\u0027event\u0027))"},{"line_number":286,"context_line":"        all_alarms \u003d list(all_alarms)"},{"line_number":287,"context_line":"        all_alarm_ids \u003d [a.alarm_id for a in all_alarms]"},{"line_number":288,"context_line":"        selected \u003d self.partition_coordinator.extract_my_subset("},{"line_number":289,"context_line":"            self.PARTITIONING_GROUP_NAME, all_alarm_ids)"},{"line_number":290,"context_line":"        filter_func \u003d lambda a: a.alarm_id in selected"},{"line_number":291,"context_line":"        return list(six.moves.filter(filter_func, all_alarms))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a122d0e_a393b4ff","line":291,"range":{"start_line":286,"start_character":8,"end_line":291,"end_character":62},"in_reply_to":"1a122d0e_ddae8d80","updated":"2016-05-03 09:55:55.000000000","message":"No, it previously return the alarm objects also, and this is the fix of the bug :), previously, we input alarms objects list to PartitionCoordinator.extract_my_subset() to extract the subset of this service, the partition coordinator will use the alarm object to get hash number and get the position of hash ring to select the node. there was a big problem, that *one* alarm with *one* \"alarm_id\" will be two different alarm objects in two process,it will cause same alarms may be duplicated distributed to multiple aodh-evaluator services as the bug described. so we should use the alarm_id as input parameter, which is unique of one alarm between different process.","commit_id":"f8920b1af52f36417c5f8b65502ddac344cbc598"}],"requirements.txt":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"532ad67363d0bd213538c50a771fdc99c9373730","unresolved":false,"context_lines":[{"line_number":29,"context_line":"requests\u003e\u003d2.5.2"},{"line_number":30,"context_line":"six\u003e\u003d1.9.0"},{"line_number":31,"context_line":"stevedore\u003e\u003d1.5.0 # Apache-2.0"},{"line_number":32,"context_line":"tooz\u003e\u003d1.28.0 # Apache-2.0"},{"line_number":33,"context_line":"Werkzeug\u003e\u003d0.7 # BSD License"},{"line_number":34,"context_line":"WebOb\u003e\u003d1.2.3"},{"line_number":35,"context_line":"WSME\u003e\u003d0.8"}],"source_content_type":"text/plain","patch_set":6,"id":"1a122d0e_722fd188","line":32,"range":{"start_line":32,"start_character":6,"end_line":32,"end_character":11},"updated":"2016-04-30 17:57:00.000000000","message":"a huge bump, why?","commit_id":"ba5bd4663ab37c3004121eb5bbdc1754475189ad"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"714727204959e519e5e612e483d82f7e989b593a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"requests\u003e\u003d2.5.2"},{"line_number":30,"context_line":"six\u003e\u003d1.9.0"},{"line_number":31,"context_line":"stevedore\u003e\u003d1.5.0 # Apache-2.0"},{"line_number":32,"context_line":"tooz\u003e\u003d1.28.0 # Apache-2.0"},{"line_number":33,"context_line":"Werkzeug\u003e\u003d0.7 # BSD License"},{"line_number":34,"context_line":"WebOb\u003e\u003d1.2.3"},{"line_number":35,"context_line":"WSME\u003e\u003d0.8"}],"source_content_type":"text/plain","patch_set":6,"id":"1a122d0e_0f1f34b8","line":32,"range":{"start_line":32,"start_character":6,"end_line":32,"end_character":11},"in_reply_to":"1a122d0e_722fd188","updated":"2016-05-03 01:38:15.000000000","message":"This change need a 1.19 version for usage \"self._coordinator.is_started\", so I sync this version from global requirements.\n\nhttps://github.com/openstack/tooz/blob/1.19.0/tooz/coordination.py","commit_id":"ba5bd4663ab37c3004121eb5bbdc1754475189ad"}]}
