)]}'
{"rally/common/objects/task.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"fc12a740d900bc7d6c3869ca24f556a151f48678","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        TODO(amaretskiy): This is a workaround method that should be removed"},{"line_number":165,"context_line":"            after task_results[N][\"info\"] comes directly from the db, and"},{"line_number":166,"context_line":"            task_results[N][\"data\"][\"raw\"] becomes a generator."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        :param task_results: list of db.sqlalchemy.models.TaskResult instances"},{"line_number":169,"context_line":"        :param serializable: bool, whether to convert json non-serializable"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_c72b48ea","line":166,"updated":"2015-08-25 01:48:57.000000000","message":"please provide here structure of benchmark info. i would like to see something like: \n\n   field_name   | where \u0026 why we need it \n   ....","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"24ea877c541ec24df7f1521fead58c915fa7e47f","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        TODO(amaretskiy): This is a workaround method that should be removed"},{"line_number":165,"context_line":"            after task_results[N][\"info\"] comes directly from the db, and"},{"line_number":166,"context_line":"            task_results[N][\"data\"][\"raw\"] becomes a generator."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        :param task_results: list of db.sqlalchemy.models.TaskResult instances"},{"line_number":169,"context_line":"        :param serializable: bool, whether to convert json non-serializable"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_209f7c51","line":166,"in_reply_to":"fa1b9901_c72b48ea","updated":"2015-08-25 10:05:13.000000000","message":"Will done","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"fc12a740d900bc7d6c3869ca24f556a151f48678","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                for atomic_name, duration in itr[\"atomic_actions\"].items():"},{"line_number":186,"context_line":"                    duration \u003d duration or 0"},{"line_number":187,"context_line":"                    if atomic_name not in atomic:"},{"line_number":188,"context_line":"                        atomic[atomic_name] \u003d {\"min_duration\": duration,"},{"line_number":189,"context_line":"                                               \"max_duration\": duration}"},{"line_number":190,"context_line":"                        continue"},{"line_number":191,"context_line":"                    if (duration \u003c atomic[atomic_name][\"min_duration\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_274564b2","line":188,"updated":"2015-08-25 01:48:57.000000000","message":"I really don\u0027t know why we need min and max duration of atomic actions..","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"24ea877c541ec24df7f1521fead58c915fa7e47f","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                for atomic_name, duration in itr[\"atomic_actions\"].items():"},{"line_number":186,"context_line":"                    duration \u003d duration or 0"},{"line_number":187,"context_line":"                    if atomic_name not in atomic:"},{"line_number":188,"context_line":"                        atomic[atomic_name] \u003d {\"min_duration\": duration,"},{"line_number":189,"context_line":"                                               \"max_duration\": duration}"},{"line_number":190,"context_line":"                        continue"},{"line_number":191,"context_line":"                    if (duration \u003c atomic[atomic_name][\"min_duration\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_8060c836","line":188,"in_reply_to":"fa1b9901_274564b2","updated":"2015-08-25 10:05:13.000000000","message":"Histogram chart requires that\n\nhttps://github.com/openstack/rally/blob/master/rally/task/processing/charts.py#L199-L200","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d646aec2284b3f0d0cf1850e9e225815634ebce9","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                    if atomic_name not in atomic:"},{"line_number":188,"context_line":"                        atomic[atomic_name] \u003d {\"min_duration\": duration,"},{"line_number":189,"context_line":"                                               \"max_duration\": duration}"},{"line_number":190,"context_line":"                        continue"},{"line_number":191,"context_line":"                    if (duration \u003c atomic[atomic_name][\"min_duration\"]"},{"line_number":192,"context_line":"                            or not atomic[atomic_name][\"min_duration\"]):"},{"line_number":193,"context_line":"                        atomic[atomic_name][\"min_duration\"] \u003d duration"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_364db872","line":190,"updated":"2015-08-24 14:07:04.000000000","message":"why we need \"continue\" statement here? I prefer to use if...elif...elif .","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"24ea877c541ec24df7f1521fead58c915fa7e47f","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                    if atomic_name not in atomic:"},{"line_number":188,"context_line":"                        atomic[atomic_name] \u003d {\"min_duration\": duration,"},{"line_number":189,"context_line":"                                               \"max_duration\": duration}"},{"line_number":190,"context_line":"                        continue"},{"line_number":191,"context_line":"                    if (duration \u003c atomic[atomic_name][\"min_duration\"]"},{"line_number":192,"context_line":"                            or not atomic[atomic_name][\"min_duration\"]):"},{"line_number":193,"context_line":"                        atomic[atomic_name][\"min_duration\"] \u003d duration"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_a0bf0c5f","line":190,"in_reply_to":"fa1b9901_364db872","updated":"2015-08-25 10:05:13.000000000","message":"Sounds reasonable","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"fc12a740d900bc7d6c3869ca24f556a151f48678","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                    if not max_duration or duration \u003e max_duration:"},{"line_number":209,"context_line":"                        max_duration \u003d duration"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            for k in \"created_at\", \"updated_at\":"},{"line_number":212,"context_line":"                if not serializable:"},{"line_number":213,"context_line":"                    del bench[k]"},{"line_number":214,"context_line":"                elif bench[k]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_67691c25","line":211,"updated":"2015-08-25 01:48:57.000000000","message":"Could you add some notes here. How can it be not serializable?","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"24ea877c541ec24df7f1521fead58c915fa7e47f","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                    if not max_duration or duration \u003e max_duration:"},{"line_number":209,"context_line":"                        max_duration \u003d duration"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            for k in \"created_at\", \"updated_at\":"},{"line_number":212,"context_line":"                if not serializable:"},{"line_number":213,"context_line":"                    del bench[k]"},{"line_number":214,"context_line":"                elif bench[k]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_e07c24b7","line":211,"in_reply_to":"fa1b9901_67691c25","updated":"2015-08-25 10:05:13.000000000","message":"Will done","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"fc12a740d900bc7d6c3869ca24f556a151f48678","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                \"min_duration\": min_duration,"},{"line_number":224,"context_line":"                \"max_duration\": max_duration,"},{"line_number":225,"context_line":"                \"tstamp_start\": tstamp_start,"},{"line_number":226,"context_line":"                \"full_duration\": bench[\"data\"][\"full_duration\"],"},{"line_number":227,"context_line":"                \"load_duration\": bench[\"data\"][\"load_duration\"]}"},{"line_number":228,"context_line":"            bench[\"result\"] \u003d bench[\"data\"][\"raw\"]"},{"line_number":229,"context_line":"            bench[\"sla\"] \u003d bench[\"data\"][\"sla\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_67d7dcbf","line":226,"updated":"2015-08-25 01:48:57.000000000","message":"I am trying to get rid of word \"benchmarks\" because it\u0027s wrong, you can do any kind of test cases not only bench.. so let\u0027s use here future glossary. \n\nThere are: \n\n  tasks and subtasks (that are bench in this case)","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"24ea877c541ec24df7f1521fead58c915fa7e47f","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                \"min_duration\": min_duration,"},{"line_number":224,"context_line":"                \"max_duration\": max_duration,"},{"line_number":225,"context_line":"                \"tstamp_start\": tstamp_start,"},{"line_number":226,"context_line":"                \"full_duration\": bench[\"data\"][\"full_duration\"],"},{"line_number":227,"context_line":"                \"load_duration\": bench[\"data\"][\"load_duration\"]}"},{"line_number":228,"context_line":"            bench[\"result\"] \u003d bench[\"data\"][\"raw\"]"},{"line_number":229,"context_line":"            bench[\"sla\"] \u003d bench[\"data\"][\"sla\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_8031a80d","line":226,"in_reply_to":"fa1b9901_67d7dcbf","updated":"2015-08-25 10:05:13.000000000","message":"Will done","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"fc12a740d900bc7d6c3869ca24f556a151f48678","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                \"tstamp_start\": tstamp_start,"},{"line_number":226,"context_line":"                \"full_duration\": bench[\"data\"][\"full_duration\"],"},{"line_number":227,"context_line":"                \"load_duration\": bench[\"data\"][\"load_duration\"]}"},{"line_number":228,"context_line":"            bench[\"result\"] \u003d bench[\"data\"][\"raw\"]"},{"line_number":229,"context_line":"            bench[\"sla\"] \u003d bench[\"data\"][\"sla\"]"},{"line_number":230,"context_line":"            del bench[\"data\"]"},{"line_number":231,"context_line":"            del bench[\"task_uuid\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_47cbb853","line":228,"updated":"2015-08-25 01:48:57.000000000","message":"Maybe we should rename to: \n\n  bench[\"scenarios\"] \n\ninstead of \"result\" which is actually unclear name becasue usually result is \"sla\" not information about iterations\n\n\n+ it should be iterator e.g. \n\n  bench[\"scenarios\"] \u003d iter(copy.deepcopy(bench[\"data\"][\"raw\"]))","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"8b9d50d63a6140a27b7a262c1bfd56bbba671ba6","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                \"tstamp_start\": tstamp_start,"},{"line_number":226,"context_line":"                \"full_duration\": bench[\"data\"][\"full_duration\"],"},{"line_number":227,"context_line":"                \"load_duration\": bench[\"data\"][\"load_duration\"]}"},{"line_number":228,"context_line":"            bench[\"result\"] \u003d bench[\"data\"][\"raw\"]"},{"line_number":229,"context_line":"            bench[\"sla\"] \u003d bench[\"data\"][\"sla\"]"},{"line_number":230,"context_line":"            del bench[\"data\"]"},{"line_number":231,"context_line":"            del bench[\"task_uuid\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_08b82174","line":228,"in_reply_to":"fa1b9901_47cbb853","updated":"2015-08-26 11:15:20.000000000","message":"About rename - that are iterations, not scenarios (`bench\u0027 represents scenario)","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"24ea877c541ec24df7f1521fead58c915fa7e47f","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                \"tstamp_start\": tstamp_start,"},{"line_number":226,"context_line":"                \"full_duration\": bench[\"data\"][\"full_duration\"],"},{"line_number":227,"context_line":"                \"load_duration\": bench[\"data\"][\"load_duration\"]}"},{"line_number":228,"context_line":"            bench[\"result\"] \u003d bench[\"data\"][\"raw\"]"},{"line_number":229,"context_line":"            bench[\"sla\"] \u003d bench[\"data\"][\"sla\"]"},{"line_number":230,"context_line":"            del bench[\"data\"]"},{"line_number":231,"context_line":"            del bench[\"task_uuid\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_7b4d2971","line":228,"in_reply_to":"fa1b9901_47cbb853","updated":"2015-08-25 10:05:13.000000000","message":"Rename - yes\n\nBut this can not be iterator until we use new classes, because current plot cycles over results several times.\n\nI add iterator here in the patch where new classes are used - https://review.openstack.org/#/c/146814/61/rally/common/objects/task.py,cm","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"22a4b65a0adb6b64876c84a0505a4a856094225b","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                \"tstamp_start\": tstamp_start,"},{"line_number":226,"context_line":"                \"full_duration\": bench[\"data\"][\"full_duration\"],"},{"line_number":227,"context_line":"                \"load_duration\": bench[\"data\"][\"load_duration\"]}"},{"line_number":228,"context_line":"            bench[\"result\"] \u003d bench[\"data\"][\"raw\"]"},{"line_number":229,"context_line":"            bench[\"sla\"] \u003d bench[\"data\"][\"sla\"]"},{"line_number":230,"context_line":"            del bench[\"data\"]"},{"line_number":231,"context_line":"            del bench[\"task_uuid\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_74ef6587","line":228,"in_reply_to":"fa1b9901_7b4d2971","updated":"2015-08-25 16:08:00.000000000","message":"All is clarified now. Will be done","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"fc12a740d900bc7d6c3869ca24f556a151f48678","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            del bench[\"task_uuid\"]"},{"line_number":232,"context_line":"            del bench[\"id\"]"},{"line_number":233,"context_line":"            results.append(bench)"},{"line_number":234,"context_line":"        return results"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def get_results(self):"},{"line_number":237,"context_line":"        return db.task_result_get_all_by_uuid(self.task[\"uuid\"])"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_e7f1ac6b","line":234,"updated":"2015-08-25 01:48:57.000000000","message":"we should return iter(results) here because we should make 100% sure that we are iterating only once against list of subtasks","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"faf90745c197c17aaf4e8e62fcf2d963bf9e3743","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            del bench[\"task_uuid\"]"},{"line_number":232,"context_line":"            del bench[\"id\"]"},{"line_number":233,"context_line":"            results.append(bench)"},{"line_number":234,"context_line":"        return results"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def get_results(self):"},{"line_number":237,"context_line":"        return db.task_result_get_all_by_uuid(self.task[\"uuid\"])"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_749685f1","line":234,"in_reply_to":"fa1b9901_bb90a196","updated":"2015-08-25 16:08:51.000000000","message":"All is clarified now. Will be done","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"24ea877c541ec24df7f1521fead58c915fa7e47f","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            del bench[\"task_uuid\"]"},{"line_number":232,"context_line":"            del bench[\"id\"]"},{"line_number":233,"context_line":"            results.append(bench)"},{"line_number":234,"context_line":"        return results"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def get_results(self):"},{"line_number":237,"context_line":"        return db.task_result_get_all_by_uuid(self.task[\"uuid\"])"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa1b9901_bb90a196","line":234,"in_reply_to":"fa1b9901_e7f1ac6b","updated":"2015-08-25 10:05:13.000000000","message":"Same here, current plot.py does not use new classes. However I can modify current plot.py and transform this back to list, just as workaround","commit_id":"e81efd9550a6468265dcf8eaeb645dbd1994e98f"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"fcfad6a5c1bc06d33fa2299b9492dc61f13dca3d","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        extended \u003d []"},{"line_number":306,"context_line":"        for scenario_result in results:"},{"line_number":307,"context_line":"            scenario \u003d dict(scenario_result)"},{"line_number":308,"context_line":"            tstamp_start \u003d 0"},{"line_number":309,"context_line":"            min_duration \u003d 0"},{"line_number":310,"context_line":"            max_duration \u003d 0"},{"line_number":311,"context_line":"            iterations_failed \u003d 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_39bf46d1","line":308,"updated":"2015-09-07 14:38:20.000000000","message":"Usually, min/max finding algorithms do initialize minimums and maximums with highest value possible and lowest value possible for a given type accordingly:\n\n tstamp_start \u003d float(\"+inf\")\n min_duration \u003d float(\"+inf\")\n max_duration \u003d float(\"-inf\")\n\nThen the following code will not require checking if the values were initialized:\n\n atomic[atomic_name][\"min_duration\"] \u003d min(atomic[atomic_name][\"min_duration\"], duration)\n ...\n tstamp_start \u003d min(tstamp_start, itr[\"timestamp\"])\n ...\n\nand so on.","commit_id":"7499962b6a2d5e54c2371595c2d10fdc10bfa499"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ad7a37ce03357b7abe54b342c90bd8d70f7fd6d4","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        extended \u003d []"},{"line_number":306,"context_line":"        for scenario_result in results:"},{"line_number":307,"context_line":"            scenario \u003d dict(scenario_result)"},{"line_number":308,"context_line":"            tstamp_start \u003d 0"},{"line_number":309,"context_line":"            min_duration \u003d 0"},{"line_number":310,"context_line":"            max_duration \u003d 0"},{"line_number":311,"context_line":"            iterations_failed \u003d 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_cd0e5b32","line":308,"in_reply_to":"da20952f_39bf46d1","updated":"2015-09-08 15:19:23.000000000","message":"This method is perfect for most cases, but what will have in result data if there are no iterations?","commit_id":"7499962b6a2d5e54c2371595c2d10fdc10bfa499"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a5264c9aa0ddec6462fa64471079e948d04cf0be","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        extended \u003d []"},{"line_number":306,"context_line":"        for scenario_result in results:"},{"line_number":307,"context_line":"            scenario \u003d dict(scenario_result)"},{"line_number":308,"context_line":"            tstamp_start \u003d 0"},{"line_number":309,"context_line":"            min_duration \u003d 0"},{"line_number":310,"context_line":"            max_duration \u003d 0"},{"line_number":311,"context_line":"            iterations_failed \u003d 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_cd63bbdc","line":308,"in_reply_to":"da20952f_cd0e5b32","updated":"2015-09-08 15:20:54.000000000","message":"Obviously incorrect data.\n\nBut zeroes you current code will present are incorrect as well, just not as obviously.\n\nGenerally, what are you asking is about clapping with one hand.","commit_id":"7499962b6a2d5e54c2371595c2d10fdc10bfa499"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"25f460b1f7af15b8e0be61be321fc53585b2aec5","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        extended \u003d []"},{"line_number":306,"context_line":"        for scenario_result in results:"},{"line_number":307,"context_line":"            scenario \u003d dict(scenario_result)"},{"line_number":308,"context_line":"            tstamp_start \u003d 0"},{"line_number":309,"context_line":"            min_duration \u003d 0"},{"line_number":310,"context_line":"            max_duration \u003d 0"},{"line_number":311,"context_line":"            iterations_failed \u003d 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_db093586","line":308,"in_reply_to":"da20952f_cd63bbdc","updated":"2015-09-08 16:03:43.000000000","message":"Should I return float(\"-inf\") in this case? Or replace it with zero? If return float(\"-inf\") - is this safe data for database?","commit_id":"7499962b6a2d5e54c2371595c2d10fdc10bfa499"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"884c2279834fce6c13b16d6697213da726aba37b","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        \"updated_at\": {"},{"line_number":184,"context_line":"            \"anyOf\": ["},{"line_number":185,"context_line":"                {\"type\": \"string\", \"format\": \"date-time\"},"},{"line_number":186,"context_line":"                {\"type\": \"null\"}"},{"line_number":187,"context_line":"            ]"},{"line_number":188,"context_line":"        },"},{"line_number":189,"context_line":"        \"info\": {"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_0126e5cd","line":186,"updated":"2015-09-11 07:08:47.000000000","message":"Report bug about this. updated_at and created_at must be always set.","commit_id":"9c7b9a7e433450f21851aef544eb3aff02b8056b"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"637ecc2aa72d506c2491811e97cddb0daf0c928c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        \"updated_at\": {"},{"line_number":184,"context_line":"            \"anyOf\": ["},{"line_number":185,"context_line":"                {\"type\": \"string\", \"format\": \"date-time\"},"},{"line_number":186,"context_line":"                {\"type\": \"null\"}"},{"line_number":187,"context_line":"            ]"},{"line_number":188,"context_line":"        },"},{"line_number":189,"context_line":"        \"info\": {"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_466aaab6","line":186,"in_reply_to":"da20952f_0126e5cd","updated":"2015-09-11 10:21:08.000000000","message":"Done: https://bugs.launchpad.net/rally/+bug/1494691","commit_id":"9c7b9a7e433450f21851aef544eb3aff02b8056b"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"884c2279834fce6c13b16d6697213da726aba37b","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        its future implementation as generator and gives ability to process"},{"line_number":278,"context_line":"        arbitrary number of iterations with low memory usage."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        :param results: list of db.sqlalchemy.models.TaskResult"},{"line_number":281,"context_line":"        :param serializable: bool, whether to convert json non-serializable"},{"line_number":282,"context_line":"                             types (like datetime) to serializable ones"},{"line_number":283,"context_line":"        :returns: list of dicts, each dict represents scenario results:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_5c21249d","line":280,"updated":"2015-09-11 07:08:47.000000000","message":"It should b actually list of serialized objects.We need to fix this in future. Please report a bug.","commit_id":"9c7b9a7e433450f21851aef544eb3aff02b8056b"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"637ecc2aa72d506c2491811e97cddb0daf0c928c","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        its future implementation as generator and gives ability to process"},{"line_number":278,"context_line":"        arbitrary number of iterations with low memory usage."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        :param results: list of db.sqlalchemy.models.TaskResult"},{"line_number":281,"context_line":"        :param serializable: bool, whether to convert json non-serializable"},{"line_number":282,"context_line":"                             types (like datetime) to serializable ones"},{"line_number":283,"context_line":"        :returns: list of dicts, each dict represents scenario results:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_2b1e5f0c","line":280,"in_reply_to":"da20952f_5c21249d","updated":"2015-09-11 10:21:08.000000000","message":"Done: https://bugs.launchpad.net/rally/+bug/1494685","commit_id":"9c7b9a7e433450f21851aef544eb3aff02b8056b"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"49a1b0ec604d09882f3e566bc7b45faf53602d4e","unresolved":false,"context_lines":[{"line_number":312,"context_line":"            atomic \u003d {}"},{"line_number":313,"context_line":"            output_names \u003d set()"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            for itr in scenario[\"data\"][\"raw\"]:"},{"line_number":316,"context_line":"                for atomic_name, duration in itr[\"atomic_actions\"].items():"},{"line_number":317,"context_line":"                    duration \u003d duration or 0"},{"line_number":318,"context_line":"                    if atomic_name not in atomic:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_e94adc54","line":315,"updated":"2015-09-10 11:54:26.000000000","message":"Does the \"raw\" would be here at any case7 As I understand in line 166 we don\u0027t check while validating json that there is subdict \u0027raw\u0027 in data.\nfor itr in scenario[\"data\"].get(\"raw\", [])? The same is for other subdicts. For example for \u0027sla\u0027 in 363 line.","commit_id":"9c7b9a7e433450f21851aef544eb3aff02b8056b"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"4d8a20a6f662ea31ead87f7663f808ec01544a16","unresolved":false,"context_lines":[{"line_number":312,"context_line":"            atomic \u003d {}"},{"line_number":313,"context_line":"            output_names \u003d set()"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"            for itr in scenario[\"data\"][\"raw\"]:"},{"line_number":316,"context_line":"                for atomic_name, duration in itr[\"atomic_actions\"].items():"},{"line_number":317,"context_line":"                    duration \u003d duration or 0"},{"line_number":318,"context_line":"                    if atomic_name not in atomic:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_7c844c0a","line":315,"in_reply_to":"da20952f_e94adc54","updated":"2015-09-10 12:11:27.000000000","message":"Yes, \"raw\" data is came from engine, so will be in any case\n\nhttps://github.com/openstack/rally/blob/master/rally/task/engine.py#L129-L133","commit_id":"9c7b9a7e433450f21851aef544eb3aff02b8056b"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"49a1b0ec604d09882f3e566bc7b45faf53602d4e","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                    elif duration \u003c atomic[atomic_name][\"min_duration\"]:"},{"line_number":322,"context_line":"                        atomic[atomic_name][\"min_duration\"] \u003d duration"},{"line_number":323,"context_line":"                    elif duration \u003e atomic[atomic_name][\"max_duration\"]:"},{"line_number":324,"context_line":"                        atomic[atomic_name][\"max_duration\"] \u003d duration"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"                output_names.update(itr[\"scenario_output\"][\"data\"].keys())"},{"line_number":327,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_2602433f","line":324,"updated":"2015-09-10 11:54:26.000000000","message":"I think more concisely would be:\n    atomic[atomic_name][\"min_duration\"] \u003d min(atomic[atomic_name][\"min_duration\"], duration)\n    atomic[atomic_name][\"max_duration\"] \u003d max(atomic[atomic_name][\"max_duration\"], duration)\ninstead of above 4 lines. If there was previously like this, sorry. But note that this is a bit slower then as in your code, but more readable)","commit_id":"9c7b9a7e433450f21851aef544eb3aff02b8056b"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"4d8a20a6f662ea31ead87f7663f808ec01544a16","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                    elif duration \u003c atomic[atomic_name][\"min_duration\"]:"},{"line_number":322,"context_line":"                        atomic[atomic_name][\"min_duration\"] \u003d duration"},{"line_number":323,"context_line":"                    elif duration \u003e atomic[atomic_name][\"max_duration\"]:"},{"line_number":324,"context_line":"                        atomic[atomic_name][\"max_duration\"] \u003d duration"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"                output_names.update(itr[\"scenario_output\"][\"data\"].keys())"},{"line_number":327,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_7c0e8c8d","line":324,"in_reply_to":"da20952f_2602433f","updated":"2015-09-10 12:11:27.000000000","message":"This gives no advantage since takes same LOC, since lines in your proposal are too long so they must be splitted to 4 lines.\n\nReadability factor is doubtful","commit_id":"9c7b9a7e433450f21851aef544eb3aff02b8056b"}],"tests/unit/common/objects/test_task.py":[{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"c7df126d16a78d42457b2c6a9575e2dfa6f873fa","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        results[0][\"iterations\"] \u003d \"foo_iterations\""},{"line_number":187,"context_line":"        expected[0][\"created_at\"] \u003d now.strftime(\"%Y-%d-%mT%H:%M:%S\")"},{"line_number":188,"context_line":"        expected[0][\"updated_at\"] \u003d None"},{"line_number":189,"context_line":"        self.assertEqual(results, expected)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @mock.patch(\"rally.common.objects.task.db.task_result_get_all_by_uuid\","},{"line_number":192,"context_line":"                return_value\u003d\"foo_results\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_399ae614","line":189,"updated":"2015-09-07 14:40:03.000000000","message":"The check that the returned object is indeed corresponding to a schema is missing.\n\nPlease check that everytime.","commit_id":"7499962b6a2d5e54c2371595c2d10fdc10bfa499"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"b9fdf9f7d281ef38ac7f68534ffb37f2124dd029","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        results[0][\"iterations\"] \u003d \"foo_iterations\""},{"line_number":187,"context_line":"        expected[0][\"created_at\"] \u003d now.strftime(\"%Y-%d-%mT%H:%M:%S\")"},{"line_number":188,"context_line":"        expected[0][\"updated_at\"] \u003d None"},{"line_number":189,"context_line":"        self.assertEqual(results, expected)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    @mock.patch(\"rally.common.objects.task.db.task_result_get_all_by_uuid\","},{"line_number":192,"context_line":"                return_value\u003d\"foo_results\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_2ccd7486","line":189,"in_reply_to":"da20952f_399ae614","updated":"2015-09-09 11:11:47.000000000","message":"Done","commit_id":"7499962b6a2d5e54c2371595c2d10fdc10bfa499"}]}
