)]}'
{"ceilometer/alarm/service.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"705e93a2c0ab530176681248b0575a4467d39c27","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            while alarms:"},{"line_number":98,"context_line":"                for alarm in candidates:"},{"line_number":99,"context_line":"                    self._evaluate_alarm(alarm)"},{"line_number":100,"context_line":"                evaluated.extend([alarm.alarm_id for alarm in candidates])"},{"line_number":101,"context_line":"                alarms -\u003d candidates"},{"line_number":102,"context_line":"                candidates.clear()"},{"line_number":103,"context_line":"                # find alarms whos dependency have been resolved"}],"source_content_type":"text/x-python","patch_set":1,"id":"bad4c104_75f3aa0a","line":100,"updated":"2014-04-29 08:36:55.000000000","message":"evaluated.extend may be moved up. e.g.\nevaluated.append(alarm.alarm_id)","commit_id":"5288a0e9451775db61db1df120872df1ed065d98"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"8c801014bde33b0b9eeffb219635517829a2adf9","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            while alarms:"},{"line_number":98,"context_line":"                for alarm in candidates:"},{"line_number":99,"context_line":"                    self._evaluate_alarm(alarm)"},{"line_number":100,"context_line":"                evaluated.extend([alarm.alarm_id for alarm in candidates])"},{"line_number":101,"context_line":"                alarms -\u003d candidates"},{"line_number":102,"context_line":"                candidates.clear()"},{"line_number":103,"context_line":"                # find alarms whos dependency have been resolved"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_a5303ce9","line":100,"in_reply_to":"bad4c104_75f3aa0a","updated":"2014-05-05 05:05:25.000000000","message":"Done","commit_id":"5288a0e9451775db61db1df120872df1ed065d98"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"705e93a2c0ab530176681248b0575a4467d39c27","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                    self._evaluate_alarm(alarm)"},{"line_number":100,"context_line":"                evaluated.extend([alarm.alarm_id for alarm in candidates])"},{"line_number":101,"context_line":"                alarms -\u003d candidates"},{"line_number":102,"context_line":"                candidates.clear()"},{"line_number":103,"context_line":"                # find alarms whos dependency have been resolved"},{"line_number":104,"context_line":"                for alarm in alarms:"},{"line_number":105,"context_line":"                    for alarm_id in alarm.combination_rule[\u0027alarm_ids\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bad4c104_95cf4eb0","line":102,"updated":"2014-04-29 08:36:55.000000000","message":"typo: whos \u003d\u003e whose, dependency\u003d\u003e dependencies","commit_id":"5288a0e9451775db61db1df120872df1ed065d98"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"8c801014bde33b0b9eeffb219635517829a2adf9","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                    self._evaluate_alarm(alarm)"},{"line_number":100,"context_line":"                evaluated.extend([alarm.alarm_id for alarm in candidates])"},{"line_number":101,"context_line":"                alarms -\u003d candidates"},{"line_number":102,"context_line":"                candidates.clear()"},{"line_number":103,"context_line":"                # find alarms whos dependency have been resolved"},{"line_number":104,"context_line":"                for alarm in alarms:"},{"line_number":105,"context_line":"                    for alarm_id in alarm.combination_rule[\u0027alarm_ids\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_8535f8db","line":102,"in_reply_to":"bad4c104_95cf4eb0","updated":"2014-05-05 05:05:25.000000000","message":"Done","commit_id":"5288a0e9451775db61db1df120872df1ed065d98"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"bf0f19a87e76ebb19e649c5cf177a79b1ba06b7b","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                candidates.clear()"},{"line_number":103,"context_line":"                # find alarms whos dependency have been resolved"},{"line_number":104,"context_line":"                for alarm in alarms:"},{"line_number":105,"context_line":"                    for alarm_id in alarm.combination_rule[\u0027alarm_ids\u0027]:"},{"line_number":106,"context_line":"                        if alarm_id not in evaluated:"},{"line_number":107,"context_line":"                            break"},{"line_number":108,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXX%2F%2FwSI%3D","line":105,"updated":"2014-04-28 08:25:49.000000000","message":"maybe to use issubset to as the test condition? It\u0027ll make the code simple to read","commit_id":"5288a0e9451775db61db1df120872df1ed065d98"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"8c801014bde33b0b9eeffb219635517829a2adf9","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                candidates.clear()"},{"line_number":103,"context_line":"                # find alarms whos dependency have been resolved"},{"line_number":104,"context_line":"                for alarm in alarms:"},{"line_number":105,"context_line":"                    for alarm_id in alarm.combination_rule[\u0027alarm_ids\u0027]:"},{"line_number":106,"context_line":"                        if alarm_id not in evaluated:"},{"line_number":107,"context_line":"                            break"},{"line_number":108,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_e52a447d","line":105,"in_reply_to":"AAAAXX%2F%2FwSI%3D","updated":"2014-05-05 05:05:25.000000000","message":"will be Done","commit_id":"5288a0e9451775db61db1df120872df1ed065d98"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"705e93a2c0ab530176681248b0575a4467d39c27","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                    for alarm_id in alarm.combination_rule[\u0027alarm_ids\u0027]:"},{"line_number":106,"context_line":"                        if alarm_id not in evaluated:"},{"line_number":107,"context_line":"                            break"},{"line_number":108,"context_line":"                    else:"},{"line_number":109,"context_line":"                        candidates.update([alarm])"},{"line_number":110,"context_line":"                # job done or there is a dead loop"},{"line_number":111,"context_line":"                if not candidates:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bad4c104_95b02ef6","line":108,"updated":"2014-04-29 08:36:55.000000000","message":"Am I right that evaluated alarm is put into candidates? On the next iteration it will be evaluated again?","commit_id":"5288a0e9451775db61db1df120872df1ed065d98"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"8c801014bde33b0b9eeffb219635517829a2adf9","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                    for alarm_id in alarm.combination_rule[\u0027alarm_ids\u0027]:"},{"line_number":106,"context_line":"                        if alarm_id not in evaluated:"},{"line_number":107,"context_line":"                            break"},{"line_number":108,"context_line":"                    else:"},{"line_number":109,"context_line":"                        candidates.update([alarm])"},{"line_number":110,"context_line":"                # job done or there is a dead loop"},{"line_number":111,"context_line":"                if not candidates:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_a5191c7b","line":108,"in_reply_to":"bad4c104_95b02ef6","updated":"2014-05-05 05:05:25.000000000","message":"@Nadya\n\nno\n\nvariable alarms contains alarms which have not been evaluated\n\nvariable candidates contains alarms whose dependencies have been resolved, but themselves have not been evaluated.","commit_id":"5288a0e9451775db61db1df120872df1ed065d98"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"c1c8a4fa51bb3581c4080e40cf10a00ce2c35987","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                candidates.clear()"},{"line_number":103,"context_line":"                # find alarms whose dependencies have been resolved"},{"line_number":104,"context_line":"                for alarm in alarms:"},{"line_number":105,"context_line":"                    ids \u003d alarm.combination_rule[\u0027alarm_ids\u0027]"},{"line_number":106,"context_line":"                    if set(ids) \u003c\u003d evaluated:"},{"line_number":107,"context_line":"                        candidates.add(alarm)"},{"line_number":108,"context_line":"                # job done or there is a dead loop"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_cb3d212d","line":105,"updated":"2014-05-06 14:41:37.000000000","message":"why \"\u003c\u003d\" is used? And do we need \u0027break\u0027 after candidates.add()?","commit_id":"1bd6fb7e3af50122e1fae503cce2879d58702184"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"196e9d78997051554d012ae3283fcf801bf809c0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                candidates.clear()"},{"line_number":103,"context_line":"                # find alarms whose dependencies have been resolved"},{"line_number":104,"context_line":"                for alarm in alarms:"},{"line_number":105,"context_line":"                    ids \u003d alarm.combination_rule[\u0027alarm_ids\u0027]"},{"line_number":106,"context_line":"                    if set(ids) \u003c\u003d evaluated:"},{"line_number":107,"context_line":"                        candidates.add(alarm)"},{"line_number":108,"context_line":"                # job done or there is a dead loop"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_ac1796a2","line":105,"in_reply_to":"9ad9bd40_25d6b6f1","updated":"2014-05-08 08:18:36.000000000","message":"thanks for explanations!","commit_id":"1bd6fb7e3af50122e1fae503cce2879d58702184"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"42ca4bb981a52b556f44fa750619a8fee192c4b9","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                candidates.clear()"},{"line_number":103,"context_line":"                # find alarms whose dependencies have been resolved"},{"line_number":104,"context_line":"                for alarm in alarms:"},{"line_number":105,"context_line":"                    ids \u003d alarm.combination_rule[\u0027alarm_ids\u0027]"},{"line_number":106,"context_line":"                    if set(ids) \u003c\u003d evaluated:"},{"line_number":107,"context_line":"                        candidates.add(alarm)"},{"line_number":108,"context_line":"                # job done or there is a dead loop"}],"source_content_type":"text/x-python","patch_set":2,"id":"9ad9bd40_25d6b6f1","line":105,"in_reply_to":"9ad9bd40_cb3d212d","updated":"2014-05-06 18:09:46.000000000","message":"I use \u003c\u003d because I thought it is more elegant than set(ids).issubset(evaluated), see: https://docs.python.org/2/library/stdtypes.html#set.issubset\n\nwe don\u0027t need break, eventually, we evaluate alarm one by one, so if we add break here, it has same effect as not. \n\nBut it waste more time to execute statements in the while loop, for i.e, if we have 5 combination alarms depend on several threshold alarm, then if there is no break, the loop will only be executed one time, but if add break, it will be run 5 times\n\nThanks","commit_id":"1bd6fb7e3af50122e1fae503cce2879d58702184"}],"ceilometer/tests/base.py":[{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"300c0a5da40b0cc04cd9d985a10bb252e4a2e4da","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def fake_uuid(x):"},{"line_number":98,"context_line":"    return \u0027%s-%s-%s-%s\u0027 % (x * 8, x * 4, x * 4, x * 12)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5adbc538_3fc5715b","line":98,"updated":"2014-05-26 09:37:29.000000000","message":"Would this not fit better in test/test_utils.py?","commit_id":"ad2fd98f8b04246d967edbcdd19ad24cfc9098a9"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"c00586ab0339fc048a5dd8e06581b74546951495","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def fake_uuid(x):"},{"line_number":98,"context_line":"    return \u0027%s-%s-%s-%s\u0027 % (x * 8, x * 4, x * 4, x * 12)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_fcbdde03","line":98,"in_reply_to":"3ae8d1ca_660a1fd4","updated":"2014-05-27 09:17:21.000000000","message":"well - quite agree here - testing utils might be useful then. For instance, we\u0027re defining get_publisher function in several test files - the same one, I guess it\u0027s more there.","commit_id":"ad2fd98f8b04246d967edbcdd19ad24cfc9098a9"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"8c13c27a9f78687a6c50d305545a2f533ae61ba8","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def fake_uuid(x):"},{"line_number":98,"context_line":"    return \u0027%s-%s-%s-%s\u0027 % (x * 8, x * 4, x * 4, x * 12)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_660a1fd4","line":98,"in_reply_to":"3ae8d1ca_c5cdb05f","updated":"2014-05-27 08:20:52.000000000","message":"Oops, I was too quick on this one. But I still think we should have a utils.py file, I know nova has one. I don\u0027t think it will have only two lines for long, other code will land in there soon after it\u0027s there. But you might want to ask a core about it anyway.","commit_id":"ad2fd98f8b04246d967edbcdd19ad24cfc9098a9"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"9644c38e630fb1ed222ba2b4f07c0576708fcfbe","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def fake_uuid(x):"},{"line_number":98,"context_line":"    return \u0027%s-%s-%s-%s\u0027 % (x * 8, x * 4, x * 4, x * 12)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ae8d1ca_c5cdb05f","line":98,"in_reply_to":"5adbc538_3fc5715b","updated":"2014-05-27 02:39:59.000000000","message":"do you mean tests/test_utils.py?\n\nthat file is intended to test ceilometer.utils.\n\nsince there are no such common or util files, and this file contains another function _skip_decorator, I choose to place it here. I think maybe a tests/utils.py can be created, but I\u0027m not sure if it is a good idea to have only two lines........\n\nthanks","commit_id":"ad2fd98f8b04246d967edbcdd19ad24cfc9098a9"}],"ceilometer/tests/image/test_notifications.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5b9ff0700fc86af350bf370e5ae9437d8f5f8f94","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from ceilometer.tests import base"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"fake_uuid \u003d base.fake_uuid"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"NOW \u003d datetime.datetime.isoformat(datetime.datetime.utcnow())"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_801ad9c3","line":28,"updated":"2014-05-19 14:54:29.000000000","message":"Can we replace properly the fill everywhere instead of this?","commit_id":"1bd6fb7e3af50122e1fae503cce2879d58702184"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"d8990ea3957b5609f7c3646dbff595ddb0381844","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from ceilometer.tests import base"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"fake_uuid \u003d base.fake_uuid"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"NOW \u003d datetime.datetime.isoformat(datetime.datetime.utcnow())"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5adbc538_750ac3d3","line":28,"in_reply_to":"7adec928_801ad9c3","updated":"2014-05-26 03:49:23.000000000","message":"Done","commit_id":"1bd6fb7e3af50122e1fae503cce2879d58702184"}]}
