)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"44c619d5cbee2b2a4ac281f00c70b5a5f9c227a8","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implementation of \u0027rally task abort\u0027 command"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"With key --soft command should wait while current running benchmark"},{"line_number":10,"context_line":"is finished, otherwise interrupt benchmark immidiatly after running"},{"line_number":11,"context_line":"scenario iterations are finished."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia07d165037eb98a9542ffdc91b7279ef3c3d496f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9aa53dc9_20b89129","line":10,"updated":"2015-04-09 15:45:55.000000000","message":"typo: immediately","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implementation of \u0027rally task abort\u0027 command"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"With key --soft command should wait while current running benchmark"},{"line_number":10,"context_line":"is finished, otherwise interrupt benchmark immidiatly after running"},{"line_number":11,"context_line":"scenario iterations are finished."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia07d165037eb98a9542ffdc91b7279ef3c3d496f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"3afb71cf_4bfcb96f","line":10,"in_reply_to":"9aa53dc9_20b89129","updated":"2015-06-10 13:09:06.000000000","message":"Done","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"}],"rally/api.py":[{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"37c7bfa78027a49639d2843f3458178a71729836","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    @classmethod"},{"line_number":204,"context_line":"    def abort(cls, task_uuid, soft\u003dFalse):"},{"line_number":205,"context_line":"        \"\"\"Abort running task.\"\"\""},{"line_number":206,"context_line":"        task \u003d objects.Task.get(task_uuid)"},{"line_number":207,"context_line":"        task.update_status(consts.TaskStatus.SOFT_ABORTING if soft"},{"line_number":208,"context_line":"                           else consts.TaskStatus.ABORTING)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aa53dc9_acaec1e3","line":205,"updated":"2015-04-10 08:09:41.000000000","message":"Please add descriptions for the parameters (\u0027task_uuid\u0027 and \u0027soft\u0027)","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    @classmethod"},{"line_number":204,"context_line":"    def abort(cls, task_uuid, soft\u003dFalse):"},{"line_number":205,"context_line":"        \"\"\"Abort running task.\"\"\""},{"line_number":206,"context_line":"        task \u003d objects.Task.get(task_uuid)"},{"line_number":207,"context_line":"        task.update_status(consts.TaskStatus.SOFT_ABORTING if soft"},{"line_number":208,"context_line":"                           else consts.TaskStatus.ABORTING)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_8b599190","line":205,"in_reply_to":"9aa53dc9_acaec1e3","updated":"2015-06-10 13:09:06.000000000","message":"Done","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"aa914d2b61f58628ff2f842ec6398ab40c85effc","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                     current scenario, otherwise as soon as possible before"},{"line_number":219,"context_line":"                     all the scenario iterations finish"},{"line_number":220,"context_line":"        \"\"\""},{"line_number":221,"context_line":"        current_status \u003d objects.Task.get(task_uuid)[\"status\"]"},{"line_number":222,"context_line":"        if current_status in [consts.TaskStatus.VERIFYING,"},{"line_number":223,"context_line":"                              consts.TaskStatus.INIT]:"},{"line_number":224,"context_line":"            LOG.info(_(\"Task status is \u0027%(status)s\u0027. Let\u0027s wait until it \""}],"source_content_type":"text/x-python","patch_set":37,"id":"3a50d1a3_fe1ac06d","line":221,"updated":"2015-07-20 21:09:16.000000000","message":"I would prefer here to have method. \n\n   objects.Task.get_status(task_uuid)\n\nIt will allow us to have optimal code that fetchs only status from DB.","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"aa914d2b61f58628ff2f842ec6398ab40c85effc","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                              consts.TaskStatus.INIT]:"},{"line_number":224,"context_line":"            LOG.info(_(\"Task status is \u0027%(status)s\u0027. Let\u0027s wait until it \""},{"line_number":225,"context_line":"                       \"became \u0027running\u0027.\"))"},{"line_number":226,"context_line":"            while current_status in [consts.TaskStatus.VERIFYING,"},{"line_number":227,"context_line":"                                     consts.TaskStatus.INIT]:"},{"line_number":228,"context_line":"                time.sleep(0.5)"},{"line_number":229,"context_line":"                current_status \u003d objects.Task.get(task_uuid)[\"status\"]"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a50d1a3_037f17ab","line":226,"updated":"2015-07-20 21:09:16.000000000","message":"This looks quite ugly..... But I don\u0027t see better way to manage this.","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"a5399e1fd3569739b0555937fe4ed78116c5a67a","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                       \"became \u0027running\u0027.\"))"},{"line_number":226,"context_line":"            while current_status in [consts.TaskStatus.VERIFYING,"},{"line_number":227,"context_line":"                                     consts.TaskStatus.INIT]:"},{"line_number":228,"context_line":"                time.sleep(0.5)"},{"line_number":229,"context_line":"                current_status \u003d objects.Task.get(task_uuid)[\"status\"]"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        if current_status \u003d\u003d consts.TaskStatus.RUNNING:"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_f960eda6","line":228,"updated":"2015-07-15 09:32:39.000000000","message":"what is that the magic const?) Maybe make it configurable?","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"aa914d2b61f58628ff2f842ec6398ab40c85effc","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                       \"became \u0027running\u0027.\"))"},{"line_number":226,"context_line":"            while current_status in [consts.TaskStatus.VERIFYING,"},{"line_number":227,"context_line":"                                     consts.TaskStatus.INIT]:"},{"line_number":228,"context_line":"                time.sleep(0.5)"},{"line_number":229,"context_line":"                current_status \u003d objects.Task.get(task_uuid)[\"status\"]"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        if current_status \u003d\u003d consts.TaskStatus.RUNNING:"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a50d1a3_c3360f03","line":228,"in_reply_to":"9a41bdd9_0656cecd","updated":"2015-07-20 21:09:16.000000000","message":"I will put here 0.1 instead of 0.5","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"118a7f345524c704d7fc405ab115bc5d095e64b8","unresolved":false,"context_lines":[{"line_number":225,"context_line":"                       \"became \u0027running\u0027.\"))"},{"line_number":226,"context_line":"            while current_status in [consts.TaskStatus.VERIFYING,"},{"line_number":227,"context_line":"                                     consts.TaskStatus.INIT]:"},{"line_number":228,"context_line":"                time.sleep(0.5)"},{"line_number":229,"context_line":"                current_status \u003d objects.Task.get(task_uuid)[\"status\"]"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        if current_status \u003d\u003d consts.TaskStatus.RUNNING:"}],"source_content_type":"text/x-python","patch_set":37,"id":"9a41bdd9_0656cecd","line":228,"in_reply_to":"ba3cc151_f960eda6","updated":"2015-07-15 09:47:20.000000000","message":"There is only one case, when L226-229 will be executed : user starts task and abort it in next several seconds. I suppose that this case will be not popular, so additional variable in config file is redundant.","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e25a3fa3cb6b99c868bcaa387b2d2f1498a85439","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            raise exceptions.RallyException("},{"line_number":258,"context_line":"                _(\"Task %(uuid)s cannot be aborted, because its status is \""},{"line_number":259,"context_line":"                  \"\u0027%(status)s\u0027\") % {\"uuid\": task_uuid,"},{"line_number":260,"context_line":"                                     \"status\": current_status})"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    @classmethod"},{"line_number":263,"context_line":"    def delete(cls, task_uuid, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a50d1a3_4a7f8866","line":260,"updated":"2015-07-30 16:51:59.000000000","message":"This makes it impossible to \"upgrade\" a soft abort to a hard abort, which seems like it\u0027d be nice to have. We should allow changing a SOFT_ABORTING task to ABORTING as well.","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"fc2fd3ffe170583ec20e1f14aee17c944e7a41ca","unresolved":false,"context_lines":[{"line_number":257,"context_line":"            raise exceptions.RallyException("},{"line_number":258,"context_line":"                _(\"Task %(uuid)s cannot be aborted, because its status is \""},{"line_number":259,"context_line":"                  \"\u0027%(status)s\u0027\") % {\"uuid\": task_uuid,"},{"line_number":260,"context_line":"                                     \"status\": current_status})"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    @classmethod"},{"line_number":263,"context_line":"    def delete(cls, task_uuid, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":41,"id":"1a4dcd0f_6974ecfc","line":260,"in_reply_to":"3a50d1a3_4a7f8866","updated":"2015-08-05 14:42:30.000000000","message":"Done","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"975481ddb9f6db84c80cf6dbd74dbe8b9ddc9a60","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            raise"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    @classmethod"},{"line_number":234,"context_line":"    def abort(cls, task_uuid, soft\u003dFalse):"},{"line_number":235,"context_line":"        \"\"\"Abort running task."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        :param task_uuid: The UUID of the task"}],"source_content_type":"text/x-python","patch_set":46,"id":"1a4dcd0f_9a714ee3","line":234,"updated":"2015-08-10 11:18:03.000000000","message":"Race condition is possible here.\n\nWe should try to make some kind of atomic conditional update:\n\n UPDATE task SET status\u003d\u0027ABORTING\u0027 WHERE id\u003d%ID% AND status\u003d\u0027RUNNING\u0027\n\nThen we can raise an exception if zero rows affected.","commit_id":"44676a33ba6aafab6fb2a360aa485e221cc0d6b3"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4020d3b4efb433dcc9891112c8d6958918859fcc","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            raise"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    @classmethod"},{"line_number":234,"context_line":"    def abort(cls, task_uuid, soft\u003dFalse):"},{"line_number":235,"context_line":"        \"\"\"Abort running task."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        :param task_uuid: The UUID of the task"}],"source_content_type":"text/x-python","patch_set":46,"id":"1a4dcd0f_45ec34f3","line":234,"in_reply_to":"1a4dcd0f_9a714ee3","updated":"2015-08-10 17:35:58.000000000","message":"+1 agree on this","commit_id":"44676a33ba6aafab6fb2a360aa485e221cc0d6b3"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"86fc51d1ad1a4503761012dc2ebfbad6435ae273","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                     current scenario, otherwise as soon as possible before"},{"line_number":240,"context_line":"                     all the scenario iterations finish"},{"line_number":241,"context_line":"        \"\"\""},{"line_number":242,"context_line":"        current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":243,"context_line":"        if current_status in [consts.TaskStatus.VERIFYING,"},{"line_number":244,"context_line":"                              consts.TaskStatus.INIT]:"},{"line_number":245,"context_line":"            LOG.info(_(\"Task status is \u0027%s\u0027. Let\u0027s wait until it \""}],"source_content_type":"text/x-python","patch_set":65,"id":"fa1b9901_4196484d","line":242,"updated":"2015-08-25 00:28:58.000000000","message":"All this logic should be in \n\n  rally.common.objects.Task.get(uuid).abort() method that will raise all these exceptions.","commit_id":"c3450ebb3b9490a53e6d87f9d6a79d31ec6fbacb"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"05f60e8f2cd45f7ad2dd5978462f26656388771a","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                       \"became \u0027running\u0027.\") % current_status)"},{"line_number":247,"context_line":"            while current_status in [consts.TaskStatus.VERIFYING,"},{"line_number":248,"context_line":"                                     consts.TaskStatus.INIT]:"},{"line_number":249,"context_line":"                time.sleep(0.1)"},{"line_number":250,"context_line":"                current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":251,"context_line":"        elif current_status in [consts.TaskStatus.FINISHED,"},{"line_number":252,"context_line":"                                consts.TaskStatus.FAILED]:"}],"source_content_type":"text/x-python","patch_set":65,"id":"fa1b9901_a19c045e","line":249,"updated":"2015-08-25 00:35:18.000000000","message":"Please leave a huge TODO() to fix how we are working with TaskStatus that will allow us to remove this while. E.g. we will be able to abort task at any point.","commit_id":"c3450ebb3b9490a53e6d87f9d6a79d31ec6fbacb"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f8744d336ee9962e31ec670e774cbebd4deeccbe","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            raise"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @classmethod"},{"line_number":233,"context_line":"    def abort(cls, task_uuid, soft\u003dFalse, wait\u003dFalse):"},{"line_number":234,"context_line":"        \"\"\"Abort running task."},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        :param task_uuid: The UUID of the task"}],"source_content_type":"text/x-python","patch_set":67,"id":"da20952f_58837956","line":233,"updated":"2015-09-03 20:17:37.000000000","message":"async\u003dTrue","commit_id":"1445a3c27eeb8079d557273f7001e6e76f74dece"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f8744d336ee9962e31ec670e774cbebd4deeccbe","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        :param wait: wait until task became in \u0027running\u0027 state [Default: False]"},{"line_number":243,"context_line":"        :type wait: bool"},{"line_number":244,"context_line":"        \"\"\""},{"line_number":245,"context_line":"        objects.Task.get(task_uuid).abort(soft\u003dsoft, wait\u003dwait)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    @classmethod"},{"line_number":248,"context_line":"    def delete(cls, task_uuid, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":67,"id":"da20952f_d897898e","line":245,"updated":"2015-09-03 20:17:37.000000000","message":"I believe we can put here logic related to async","commit_id":"1445a3c27eeb8079d557273f7001e6e76f74dece"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"12bfe3f4a70c360155f514ba63b8b3e9dec92e4c","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            if current_status in not_implemented_stages:"},{"line_number":253,"context_line":"                LOG.info(_LI(\"Task status is \u0027%s\u0027. Let\u0027s wait until it became \""},{"line_number":254,"context_line":"                             \"\u0027running\u0027\") % current_status)"},{"line_number":255,"context_line":"                print(\"Process bar: \", end\u003d\"\")"},{"line_number":256,"context_line":"                while current_status in not_implemented_stages:"},{"line_number":257,"context_line":"                    print(\".\", end\u003d\"\")"},{"line_number":258,"context_line":"                    time.sleep(0.2)"}],"source_content_type":"text/x-python","patch_set":70,"id":"da20952f_e8b31beb","line":255,"updated":"2015-09-08 11:20:02.000000000","message":"Do you mean \"progress bar\" ? Actually, just a running line of dots would be enough for me.","commit_id":"aea9191e2c9b9fad9917efdfd0e8a884afc77145"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"fa7e40cfbebfbfb0494a396a2a883b6058dffcc5","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            if current_status in not_implemented_stages:"},{"line_number":253,"context_line":"                LOG.info(_LI(\"Task status is \u0027%s\u0027. Let\u0027s wait until it became \""},{"line_number":254,"context_line":"                             \"\u0027running\u0027\") % current_status)"},{"line_number":255,"context_line":"                print(\"Process bar: \", end\u003d\"\")"},{"line_number":256,"context_line":"                while current_status in not_implemented_stages:"},{"line_number":257,"context_line":"                    print(\".\", end\u003d\"\")"},{"line_number":258,"context_line":"                    time.sleep(0.2)"}],"source_content_type":"text/x-python","patch_set":70,"id":"da20952f_d85ce47f","line":255,"in_reply_to":"da20952f_e8b31beb","updated":"2015-09-08 13:30:57.000000000","message":"\u003eDo you mean \"progress bar\" ?\n\nyes:)\n\n\u003eActually, just a running line of dots would be enough for me.\n\njust dots looks unclear in log file.","commit_id":"aea9191e2c9b9fad9917efdfd0e8a884afc77145"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"12bfe3f4a70c360155f514ba63b8b3e9dec92e4c","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                print(\"Process bar: \", end\u003d\"\")"},{"line_number":256,"context_line":"                while current_status in not_implemented_stages:"},{"line_number":257,"context_line":"                    print(\".\", end\u003d\"\")"},{"line_number":258,"context_line":"                    time.sleep(0.2)"},{"line_number":259,"context_line":"                    current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":260,"context_line":"                print(\"\\n\")"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":70,"id":"da20952f_c80e578c","line":258,"updated":"2015-09-08 11:20:02.000000000","message":"Isn\u0027t it to fast? \u00271\u0027 as below looks at least uniformly for me.","commit_id":"aea9191e2c9b9fad9917efdfd0e8a884afc77145"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"fa7e40cfbebfbfb0494a396a2a883b6058dffcc5","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                print(\"Process bar: \", end\u003d\"\")"},{"line_number":256,"context_line":"                while current_status in not_implemented_stages:"},{"line_number":257,"context_line":"                    print(\".\", end\u003d\"\")"},{"line_number":258,"context_line":"                    time.sleep(0.2)"},{"line_number":259,"context_line":"                    current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":260,"context_line":"                print(\"\\n\")"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":70,"id":"da20952f_5b49aeb6","line":258,"in_reply_to":"da20952f_c80e578c","updated":"2015-09-08 13:30:57.000000000","message":"Done","commit_id":"aea9191e2c9b9fad9917efdfd0e8a884afc77145"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"12bfe3f4a70c360155f514ba63b8b3e9dec92e4c","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            finished_stages \u003d [consts.TaskStatus.ABORTED,"},{"line_number":268,"context_line":"                               consts.TaskStatus.FINISHED,"},{"line_number":269,"context_line":"                               consts.TaskStatus.FAILED]"},{"line_number":270,"context_line":"            print(\"Process bar: \", end\u003d\"\")"},{"line_number":271,"context_line":"            while current_status not in finished_stages:"},{"line_number":272,"context_line":"                print(\".\", end\u003d\"\")"},{"line_number":273,"context_line":"                time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":70,"id":"da20952f_c837374c","line":270,"updated":"2015-09-08 11:20:02.000000000","message":"Same as above.","commit_id":"aea9191e2c9b9fad9917efdfd0e8a884afc77145"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"fa7e40cfbebfbfb0494a396a2a883b6058dffcc5","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            finished_stages \u003d [consts.TaskStatus.ABORTED,"},{"line_number":268,"context_line":"                               consts.TaskStatus.FINISHED,"},{"line_number":269,"context_line":"                               consts.TaskStatus.FAILED]"},{"line_number":270,"context_line":"            print(\"Process bar: \", end\u003d\"\")"},{"line_number":271,"context_line":"            while current_status not in finished_stages:"},{"line_number":272,"context_line":"                print(\".\", end\u003d\"\")"},{"line_number":273,"context_line":"                time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":70,"id":"da20952f_fbc4420f","line":270,"in_reply_to":"da20952f_c837374c","updated":"2015-09-08 13:30:57.000000000","message":"Done","commit_id":"aea9191e2c9b9fad9917efdfd0e8a884afc77145"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ba7f97c0a784926a0986b21e9e9954f784d345eb","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        def get_progressbar_generator():"},{"line_number":249,"context_line":"                # TODO(andreykurilin): move this code to utils, when it needed"},{"line_number":250,"context_line":"                while True:"},{"line_number":251,"context_line":"                    yield \"\\rWaiting.    \""},{"line_number":252,"context_line":"                    yield \"\\rWaiting..   \""},{"line_number":253,"context_line":"                    yield \"\\rWaiting...  \""},{"line_number":254,"context_line":"                    yield \"\\rWaiting.... \""}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_c1d78dec","line":251,"updated":"2015-09-11 06:56:32.000000000","message":"I would really prefer just adding \".\" then have billions lines of Waiting... in logs..","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        def get_progressbar_generator():"},{"line_number":249,"context_line":"                # TODO(andreykurilin): move this code to utils, when it needed"},{"line_number":250,"context_line":"                while True:"},{"line_number":251,"context_line":"                    yield \"\\rWaiting.    \""},{"line_number":252,"context_line":"                    yield \"\\rWaiting..   \""},{"line_number":253,"context_line":"                    yield \"\\rWaiting...  \""},{"line_number":254,"context_line":"                    yield \"\\rWaiting.... \""}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_94fb7547","line":251,"in_reply_to":"da20952f_c1d78dec","updated":"2015-09-21 14:24:41.000000000","message":"Done","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"27b14ed13499ed1df67886b742b898a2b0c10332","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                    yield \"\\rWaiting.... \""},{"line_number":255,"context_line":"                    yield \"\\rWaiting.....\""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        if not async:"},{"line_number":258,"context_line":"            current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":259,"context_line":"            not_implemented_stages \u003d [consts.TaskStatus.VERIFYING,"},{"line_number":260,"context_line":"                                      consts.TaskStatus.INIT]"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_49abc81e","line":257,"updated":"2015-09-10 12:16:08.000000000","message":"Why checking this only if not async? Is it OK to abort a task which is in one of not_implemented_stages?","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                    yield \"\\rWaiting.... \""},{"line_number":255,"context_line":"                    yield \"\\rWaiting.....\""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        if not async:"},{"line_number":258,"context_line":"            current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":259,"context_line":"            not_implemented_stages \u003d [consts.TaskStatus.VERIFYING,"},{"line_number":260,"context_line":"                                      consts.TaskStatus.INIT]"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_3faa46d3","line":257,"in_reply_to":"da20952f_49abc81e","updated":"2015-09-21 14:24:41.000000000","message":"\u003eIs it OK to abort a task which is in one of not_implemented_stages?\n\nnot, it is not ok. That is why objects.Task.abort will raise an exception for these stages.","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"27b14ed13499ed1df67886b742b898a2b0c10332","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                             \" \u0027running\u0027\") % current_status)"},{"line_number":264,"context_line":"                gen \u003d get_progressbar_generator()"},{"line_number":265,"context_line":"                while current_status in not_implemented_stages:"},{"line_number":266,"context_line":"                    sys.stdout.write(next(gen))"},{"line_number":267,"context_line":"                    sys.stdout.flush()"},{"line_number":268,"context_line":"                    time.sleep(1)"},{"line_number":269,"context_line":"                    current_status \u003d objects.Task.get_status(task_uuid)"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_3c0ed432","line":266,"updated":"2015-09-10 12:16:08.000000000","message":"Is enough to just write a dot here. Also it would be nice to have a function like \"wait_for\".","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ba7f97c0a784926a0986b21e9e9954f784d345eb","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                             \" \u0027running\u0027\") % current_status)"},{"line_number":264,"context_line":"                gen \u003d get_progressbar_generator()"},{"line_number":265,"context_line":"                while current_status in not_implemented_stages:"},{"line_number":266,"context_line":"                    sys.stdout.write(next(gen))"},{"line_number":267,"context_line":"                    sys.stdout.flush()"},{"line_number":268,"context_line":"                    time.sleep(1)"},{"line_number":269,"context_line":"                    current_status \u003d objects.Task.get_status(task_uuid)"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_61ffa166","line":266,"in_reply_to":"da20952f_3c0ed432","updated":"2015-09-11 06:56:32.000000000","message":"+1","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                             \" \u0027running\u0027\") % current_status)"},{"line_number":264,"context_line":"                gen \u003d get_progressbar_generator()"},{"line_number":265,"context_line":"                while current_status in not_implemented_stages:"},{"line_number":266,"context_line":"                    sys.stdout.write(next(gen))"},{"line_number":267,"context_line":"                    sys.stdout.flush()"},{"line_number":268,"context_line":"                    time.sleep(1)"},{"line_number":269,"context_line":"                    current_status \u003d objects.Task.get_status(task_uuid)"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_5ff29a07","line":266,"in_reply_to":"da20952f_3c0ed432","updated":"2015-09-21 14:24:41.000000000","message":"\u003eIs enough to just write a dot here\n\ndots looks unclear in log files(it can be only one printed dot at new line).","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2144d6d083082a3f0ed7b6a6a36356ee7eb2892a","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":250,"context_line":"            not_implemented_stages \u003d [consts.TaskStatus.VERIFYING,"},{"line_number":251,"context_line":"                                      consts.TaskStatus.INIT]"},{"line_number":252,"context_line":"            if current_status in not_implemented_stages:"},{"line_number":253,"context_line":"                LOG.info(_LI(\"Task status is \u0027%s\u0027. Should wait until it became\""},{"line_number":254,"context_line":"                             \" \u0027running\u0027\") % current_status)"},{"line_number":255,"context_line":"                while current_status in not_implemented_stages:"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_ccdb84ec","line":252,"updated":"2015-09-22 06:30:27.000000000","message":"we should add some comment here (why this is not implemented)","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3c34688d9c0cb4d172b7eedc1845960c1916814c","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":250,"context_line":"            not_implemented_stages \u003d [consts.TaskStatus.VERIFYING,"},{"line_number":251,"context_line":"                                      consts.TaskStatus.INIT]"},{"line_number":252,"context_line":"            if current_status in not_implemented_stages:"},{"line_number":253,"context_line":"                LOG.info(_LI(\"Task status is \u0027%s\u0027. Should wait until it became\""},{"line_number":254,"context_line":"                             \" \u0027running\u0027\") % current_status)"},{"line_number":255,"context_line":"                while current_status in not_implemented_stages:"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_d859fb36","line":252,"in_reply_to":"ba15a1d1_ccdb84ec","updated":"2015-09-22 09:19:49.000000000","message":"Done","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2144d6d083082a3f0ed7b6a6a36356ee7eb2892a","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                while current_status in not_implemented_stages:"},{"line_number":256,"context_line":"                    time.sleep(1)"},{"line_number":257,"context_line":"                    current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":258,"context_line":"                print(\"\\n\")"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        objects.Task.get(task_uuid).abort(soft\u003dsoft)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_0c573c03","line":258,"updated":"2015-09-22 06:30:27.000000000","message":"do not print anything in rally api","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3c34688d9c0cb4d172b7eedc1845960c1916814c","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                while current_status in not_implemented_stages:"},{"line_number":256,"context_line":"                    time.sleep(1)"},{"line_number":257,"context_line":"                    current_status \u003d objects.Task.get_status(task_uuid)"},{"line_number":258,"context_line":"                print(\"\\n\")"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        objects.Task.get(task_uuid).abort(soft\u003dsoft)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_7841cf38","line":258,"in_reply_to":"ba15a1d1_0c573c03","updated":"2015-09-22 09:19:49.000000000","message":"Done","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2144d6d083082a3f0ed7b6a6a36356ee7eb2892a","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                               consts.TaskStatus.FINISHED,"},{"line_number":266,"context_line":"                               consts.TaskStatus.FAILED]"},{"line_number":267,"context_line":"            while objects.Task.get_status(task_uuid) not in finished_stages:"},{"line_number":268,"context_line":"                time.sleep(1)"},{"line_number":269,"context_line":"            print(\"\\n\")"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_6cf1186a","line":268,"updated":"2015-09-22 06:30:27.000000000","message":"we should add here LIMIT like 600 seconds otherwise it will rise exception can\u0027t stop","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2144d6d083082a3f0ed7b6a6a36356ee7eb2892a","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                               consts.TaskStatus.FAILED]"},{"line_number":267,"context_line":"            while objects.Task.get_status(task_uuid) not in finished_stages:"},{"line_number":268,"context_line":"                time.sleep(1)"},{"line_number":269,"context_line":"            print(\"\\n\")"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    @classmethod"},{"line_number":272,"context_line":"    def delete(cls, task_uuid, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_6c50380b","line":269,"updated":"2015-09-22 06:30:27.000000000","message":"do not print anything in rally.api","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3c34688d9c0cb4d172b7eedc1845960c1916814c","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                               consts.TaskStatus.FAILED]"},{"line_number":267,"context_line":"            while objects.Task.get_status(task_uuid) not in finished_stages:"},{"line_number":268,"context_line":"                time.sleep(1)"},{"line_number":269,"context_line":"            print(\"\\n\")"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    @classmethod"},{"line_number":272,"context_line":"    def delete(cls, task_uuid, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_384b575b","line":269,"in_reply_to":"ba15a1d1_6c50380b","updated":"2015-09-22 09:19:49.000000000","message":"Done","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"}],"rally/benchmark/engine.py":[{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"196f30a3589d97d378dd0dbba93f9fec730a63fc","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        Has to be run from different thread simultaneously with the runner.run"},{"line_number":286,"context_line":"        method."},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        :param task: Running task"},{"line_number":289,"context_line":"        :param runner: ScenarioRunner object that was used to run a task"},{"line_number":290,"context_line":"        \"\"\""},{"line_number":291,"context_line":"        while not is_done.isSet():"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_c9165ff1","line":288,"updated":"2015-03-11 13:11:43.000000000","message":"Missing line:\n    :param is_done: ...","commit_id":"fa797163cccfd97bd3a407c631648995412960a7"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"196f30a3589d97d378dd0dbba93f9fec730a63fc","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        while not is_done.isSet():"},{"line_number":292,"context_line":"            status \u003d task.get_status()"},{"line_number":293,"context_line":"            if status \u003d\u003d consts.TaskStatus.SOFT_ABORTING:"},{"line_number":294,"context_line":"                runner.abort()"},{"line_number":295,"context_line":"                break"},{"line_number":296,"context_line":"            time.sleep(2)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_897387e6","line":294,"updated":"2015-03-11 13:11:43.000000000","message":"So, as discussed, this should be implemented not via runner.abort(), which should be used for HARD_ABORTING","commit_id":"fa797163cccfd97bd3a407c631648995412960a7"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"acce88d65d2fda9a16b6086d741d852bc42314e7","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                    LOG.exception(e)"},{"line_number":249,"context_line":"                finally:"},{"line_number":250,"context_line":"                    self.full_duration \u003d timer.duration()"},{"line_number":251,"context_line":"                    is_done.set()"},{"line_number":252,"context_line":"                    consumer.join()"},{"line_number":253,"context_line":"        self.task.update_status(consts.TaskStatus.FINISHED)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baa041b7_822b4830","line":251,"updated":"2015-04-02 16:07:13.000000000","message":"probably abort_checker should be joined here too","commit_id":"87876174dbb5500f6625dcd4bb376d779ec66e6f"},{"author":{"_account_id":9180,"name":"Olga Kopylova","email":"olkonami@gmail.com","username":"olkonami"},"change_message_id":"b139f2ca78b0a7dbf7473a2ac831d062e0adf2f0","unresolved":false,"context_lines":[{"line_number":248,"context_line":"                    LOG.exception(e)"},{"line_number":249,"context_line":"                finally:"},{"line_number":250,"context_line":"                    self.full_duration \u003d timer.duration()"},{"line_number":251,"context_line":"                    is_done.set()"},{"line_number":252,"context_line":"                    consumer.join()"},{"line_number":253,"context_line":"        self.task.update_status(consts.TaskStatus.FINISHED)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"baa041b7_15b19be1","line":251,"in_reply_to":"baa041b7_822b4830","updated":"2015-04-03 16:17:01.000000000","message":"We do not need to wait for abort_checker, it will give nothing except extra waiting. Consumer is joined here because we need to collect all results, abort_checker just should be finished when is_done is set.","commit_id":"87876174dbb5500f6625dcd4bb376d779ec66e6f"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"acce88d65d2fda9a16b6086d741d852bc42314e7","unresolved":false,"context_lines":[{"line_number":298,"context_line":"            if task.get_status() \u003d\u003d consts.TaskStatus.ABORTING:"},{"line_number":299,"context_line":"                runner.abort()"},{"line_number":300,"context_line":"                break"},{"line_number":301,"context_line":"            time.sleep(2)"}],"source_content_type":"text/x-python","patch_set":14,"id":"baa041b7_a2dd2c44","line":301,"updated":"2015-04-02 16:07:13.000000000","message":"It would be nice to have this value configurable","commit_id":"87876174dbb5500f6625dcd4bb376d779ec66e6f"},{"author":{"_account_id":9180,"name":"Olga Kopylova","email":"olkonami@gmail.com","username":"olkonami"},"change_message_id":"b139f2ca78b0a7dbf7473a2ac831d062e0adf2f0","unresolved":false,"context_lines":[{"line_number":298,"context_line":"            if task.get_status() \u003d\u003d consts.TaskStatus.ABORTING:"},{"line_number":299,"context_line":"                runner.abort()"},{"line_number":300,"context_line":"                break"},{"line_number":301,"context_line":"            time.sleep(2)"}],"source_content_type":"text/x-python","patch_set":14,"id":"baa041b7_55904343","line":301,"in_reply_to":"baa041b7_a2dd2c44","updated":"2015-04-03 16:17:01.000000000","message":"I am not sure. We can\u0027t have this value too small because of avoid queue to db too often. And we can\u0027t have it too big otherwise abort will be too slow. Possibly it could be configurable in some range, may be between 1 and 3, but I doubt it makes sense. I will ask Boris.","commit_id":"87876174dbb5500f6625dcd4bb376d779ec66e6f"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"37c7bfa78027a49639d2843f3458178a71729836","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                if self.task.get_status() in [consts.TaskStatus.SOFT_ABORTING,"},{"line_number":222,"context_line":"                                              consts.TaskStatus.ABORTING]:"},{"line_number":223,"context_line":"                    self.task.update_status(consts.TaskStatus.ABORTED)"},{"line_number":224,"context_line":"                    return"},{"line_number":225,"context_line":"                key \u003d {\"name\": name, \"pos\": n, \"kw\": kw}"},{"line_number":226,"context_line":"                LOG.info(\"Running benchmark with key: \\n%s\""},{"line_number":227,"context_line":"                         % json.dumps(key, indent\u003d2))"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aa53dc9_6c71d943","line":224,"updated":"2015-04-10 08:09:41.000000000","message":"Isn\u0027t it too bad that in case of soft aborting we just return here without calling is_done.set() / consumer.join() / aborting_checker.join()?","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                if self.task.get_status() in [consts.TaskStatus.SOFT_ABORTING,"},{"line_number":222,"context_line":"                                              consts.TaskStatus.ABORTING]:"},{"line_number":223,"context_line":"                    self.task.update_status(consts.TaskStatus.ABORTED)"},{"line_number":224,"context_line":"                    return"},{"line_number":225,"context_line":"                key \u003d {\"name\": name, \"pos\": n, \"kw\": kw}"},{"line_number":226,"context_line":"                LOG.info(\"Running benchmark with key: \\n%s\""},{"line_number":227,"context_line":"                         % json.dumps(key, indent\u003d2))"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_a3e6b1e5","line":224,"in_reply_to":"9aa53dc9_6c71d943","updated":"2015-06-10 13:09:06.000000000","message":"My bad, everything seems ok here","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"37c7bfa78027a49639d2843f3458178a71729836","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                    is_done.set()"},{"line_number":252,"context_line":"                    consumer.join()"},{"line_number":253,"context_line":"                    aborting_checker.join()"},{"line_number":254,"context_line":"        if self.task.get_status() \u003d\u003d consts.TaskStatus.ABORTING:"},{"line_number":255,"context_line":"            self.task.update_status(consts.TaskStatus.ABORTED)"},{"line_number":256,"context_line":"        else:"},{"line_number":257,"context_line":"            self.task.update_status(consts.TaskStatus.FINISHED)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aa53dc9_4cb855c8","line":254,"updated":"2015-04-10 08:09:41.000000000","message":"Not obvious for me why we need this check; could you please explain / add a \u0027NOTE\u0027 here?","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                    is_done.set()"},{"line_number":252,"context_line":"                    consumer.join()"},{"line_number":253,"context_line":"                    aborting_checker.join()"},{"line_number":254,"context_line":"        if self.task.get_status() \u003d\u003d consts.TaskStatus.ABORTING:"},{"line_number":255,"context_line":"            self.task.update_status(consts.TaskStatus.ABORTED)"},{"line_number":256,"context_line":"        else:"},{"line_number":257,"context_line":"            self.task.update_status(consts.TaskStatus.FINISHED)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_c39bed16","line":254,"in_reply_to":"9aa53dc9_4cb855c8","updated":"2015-06-10 13:09:06.000000000","message":"Got it, but I think it\u0027s vetter to set status to \u0027ABORTED\u0027 not here but in check_task_aborting(), then the code gets cleaner","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"37c7bfa78027a49639d2843f3458178a71729836","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                                  \"sla\": sla_checker.results()})"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def check_task_aborting(self, task, is_done, runner):"},{"line_number":291,"context_line":"        \"\"\"Check if task status is aborting and abort runner in this case,"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        Has to be run from different thread simultaneously with the runner.run"},{"line_number":294,"context_line":"        method."}],"source_content_type":"text/x-python","patch_set":16,"id":"9aa53dc9_6c8b1969","line":291,"updated":"2015-04-10 08:09:41.000000000","message":"Please replace \u0027,\u0027 with a dot","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                                  \"sla\": sla_checker.results()})"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def check_task_aborting(self, task, is_done, runner):"},{"line_number":291,"context_line":"        \"\"\"Check if task status is aborting and abort runner in this case,"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        Has to be run from different thread simultaneously with the runner.run"},{"line_number":294,"context_line":"        method."}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_b6539016","line":291,"in_reply_to":"9aa53dc9_6c8b1969","updated":"2015-06-10 13:09:06.000000000","message":"Done","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2c3f36e582e679d810b6b57a6262422e42869a43","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                consumer.start()"},{"line_number":266,"context_line":"                aborting_checker \u003d threading.Thread("},{"line_number":267,"context_line":"                    target\u003dself.check_task_aborting,"},{"line_number":268,"context_line":"                    args\u003d(self.task, is_done, runner))"},{"line_number":269,"context_line":"                aborting_checker.start()"},{"line_number":270,"context_line":"                context_obj \u003d self._prepare_context(kw.get(\"context\", {}),"},{"line_number":271,"context_line":"                                                    name, self.admin)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_a85d7b48","line":268,"updated":"2015-06-17 14:57:46.000000000","message":"oh... we should use here variable \"runner_obj\" instead of \"runner\" which is runner module","commit_id":"ceaa82b2f39fbbfe5fcbce336a4aa7713c0681ea"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cbf0d6e2d3e651a50a28e8a002e863cbc9082c09","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                consumer.start()"},{"line_number":266,"context_line":"                aborting_checker \u003d threading.Thread("},{"line_number":267,"context_line":"                    target\u003dself.check_task_aborting,"},{"line_number":268,"context_line":"                    args\u003d(self.task, is_done, runner))"},{"line_number":269,"context_line":"                aborting_checker.start()"},{"line_number":270,"context_line":"                context_obj \u003d self._prepare_context(kw.get(\"context\", {}),"},{"line_number":271,"context_line":"                                                    name, self.admin)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_638b1469","line":268,"in_reply_to":"fa32b979_a85d7b48","updated":"2015-06-17 15:02:31.000000000","message":"Fixed","commit_id":"ceaa82b2f39fbbfe5fcbce336a4aa7713c0681ea"}],"rally/cli/commands/task.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1377dd8f1df274851761e73e91d331679e84c1b2","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            print(_(\"Aborting Task %s\") % task_id)"},{"line_number":243,"context_line":"        else:"},{"line_number":244,"context_line":"            print(_(\"Task %(uuid)s cannot be aborted, because its status is \""},{"line_number":245,"context_line":"                    \"\u0027%(status)s\u0027\") % {\"uuid\": task_id, \"status\": task_status})"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"},{"line_number":248,"context_line":"    @envutils.with_default_task_id"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_fb0f4c2c","line":245,"updated":"2015-06-20 08:28:02.000000000","message":"we should return 1 here.","commit_id":"df1cd03e4e30f886126af4b47f469a871e36cb4e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"03f6259e53636f8fd0008e2771cc0bb399f282a6","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        \"\"\"Abort started benchmarking task."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param task_id: Task uuid"},{"line_number":229,"context_line":"        :param soft: if set to True, task should be aborted after execution of"},{"line_number":230,"context_line":"                     current scenario"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        task_status \u003d objects.Task.get(task_id)[\"status\"]"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa32b979_cc496990","line":229,"updated":"2015-06-21 07:39:23.000000000","message":"IMO it\u0027s better to have \"--soft TRUE/FALSE\" instead of (or in addition to) \"--soft\".","commit_id":"5e476c503b33f12eec4487ff36161d65b10c9076"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d7007551c02a113e520d12566272dd47e32703da","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        \"\"\"Abort started benchmarking task."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param task_id: Task uuid"},{"line_number":229,"context_line":"        :param soft: if set to True, task should be aborted after execution of"},{"line_number":230,"context_line":"                     current scenario"},{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        task_status \u003d objects.Task.get(task_id)[\"status\"]"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa32b979_4f254bc0","line":229,"in_reply_to":"fa32b979_cc496990","updated":"2015-06-21 09:46:02.000000000","message":"Rally uses \"--option\" instead of \"--option TRUE/FALSE\" in whole CLI, so I prefer use here \"--option\" style.","commit_id":"5e476c503b33f12eec4487ff36161d65b10c9076"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"03f6259e53636f8fd0008e2771cc0bb399f282a6","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        task_status \u003d objects.Task.get(task_id)[\"status\"]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if task_status in [consts.TaskStatus.VERIFYING,"},{"line_number":235,"context_line":"                           consts.TaskStatus.INIT]:"},{"line_number":236,"context_line":"            print(_(\"Task should be in \u0027running\u0027 status. Let\u0027s wait a bit...\"))"},{"line_number":237,"context_line":"            while task_status in [consts.TaskStatus.VERIFYING,"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa32b979_cc30890a","line":234,"updated":"2015-06-21 07:39:23.000000000","message":"IMO, you should strive to avoid logic in CLI. This is blocking an action that can be done in direct api calls. Please move this logic to the api.\n\nPlease try to make sure that invoking a method from CLI will have the same consequences as invoking it from API.","commit_id":"5e476c503b33f12eec4487ff36161d65b10c9076"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d7007551c02a113e520d12566272dd47e32703da","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        \"\"\""},{"line_number":232,"context_line":"        task_status \u003d objects.Task.get(task_id)[\"status\"]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if task_status in [consts.TaskStatus.VERIFYING,"},{"line_number":235,"context_line":"                           consts.TaskStatus.INIT]:"},{"line_number":236,"context_line":"            print(_(\"Task should be in \u0027running\u0027 status. Let\u0027s wait a bit...\"))"},{"line_number":237,"context_line":"            while task_status in [consts.TaskStatus.VERIFYING,"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa32b979_0f93c3fb","line":234,"in_reply_to":"fa32b979_cc30890a","updated":"2015-06-21 09:46:02.000000000","message":"you are right, will fix.","commit_id":"5e476c503b33f12eec4487ff36161d65b10c9076"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"03f6259e53636f8fd0008e2771cc0bb399f282a6","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if task_status in [consts.TaskStatus.VERIFYING,"},{"line_number":235,"context_line":"                           consts.TaskStatus.INIT]:"},{"line_number":236,"context_line":"            print(_(\"Task should be in \u0027running\u0027 status. Let\u0027s wait a bit...\"))"},{"line_number":237,"context_line":"            while task_status in [consts.TaskStatus.VERIFYING,"},{"line_number":238,"context_line":"                                  consts.TaskStatus.INIT]:"},{"line_number":239,"context_line":"                time.sleep(0.5)"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa32b979_6c5b7d55","line":236,"updated":"2015-06-21 07:39:23.000000000","message":"what if I want to kill the task anyway? maybe \"--force\" flag is in order here?","commit_id":"5e476c503b33f12eec4487ff36161d65b10c9076"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d7007551c02a113e520d12566272dd47e32703da","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if task_status in [consts.TaskStatus.VERIFYING,"},{"line_number":235,"context_line":"                           consts.TaskStatus.INIT]:"},{"line_number":236,"context_line":"            print(_(\"Task should be in \u0027running\u0027 status. Let\u0027s wait a bit...\"))"},{"line_number":237,"context_line":"            while task_status in [consts.TaskStatus.VERIFYING,"},{"line_number":238,"context_line":"                                  consts.TaskStatus.INIT]:"},{"line_number":239,"context_line":"                time.sleep(0.5)"}],"source_content_type":"text/x-python","patch_set":31,"id":"fa32b979_6f860fbb","line":236,"in_reply_to":"fa32b979_6c5b7d55","updated":"2015-06-21 09:46:02.000000000","message":"It is hard to stop a validation as well as running iteration, so this patch adds ability only to abort new scenarios (soft mode) and new iterations(hard mode).","commit_id":"5e476c503b33f12eec4487ff36161d65b10c9076"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"03f6259e53636f8fd0008e2771cc0bb399f282a6","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            api.Task.abort(task_id, soft)"},{"line_number":243,"context_line":"            print(_(\"Aborting Task %s\") % task_id)"},{"line_number":244,"context_line":"        else:"},{"line_number":245,"context_line":"            print(_(\"Task %(uuid)s cannot be aborted, because its status is \""},{"line_number":246,"context_line":"                    \"\u0027%(status)s\u0027\") % {\"uuid\": task_id, \"status\": task_status})"},{"line_number":247,"context_line":"            return(1)"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa32b979_cc172953","line":245,"updated":"2015-06-21 07:39:23.000000000","message":"Shouldn\u0027t this be an exception thrown by the API and caught here?","commit_id":"5e476c503b33f12eec4487ff36161d65b10c9076"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d7007551c02a113e520d12566272dd47e32703da","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            api.Task.abort(task_id, soft)"},{"line_number":243,"context_line":"            print(_(\"Aborting Task %s\") % task_id)"},{"line_number":244,"context_line":"        else:"},{"line_number":245,"context_line":"            print(_(\"Task %(uuid)s cannot be aborted, because its status is \""},{"line_number":246,"context_line":"                    \"\u0027%(status)s\u0027\") % {\"uuid\": task_id, \"status\": task_status})"},{"line_number":247,"context_line":"            return(1)"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"fa32b979_cf62bb16","line":245,"in_reply_to":"fa32b979_cc172953","updated":"2015-06-21 09:46:02.000000000","message":"will fix","commit_id":"5e476c503b33f12eec4487ff36161d65b10c9076"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"aa914d2b61f58628ff2f842ec6398ab40c85effc","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                     current scenario"},{"line_number":230,"context_line":"        \"\"\""},{"line_number":231,"context_line":"        api.Task.abort(task_id, soft)"},{"line_number":232,"context_line":"        print(_(\"The abort signal is successfully sent to task \u0027%s\u0027.\") %"},{"line_number":233,"context_line":"              task_id)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a50d1a3_fe48805d","line":232,"updated":"2015-07-20 21:09:16.000000000","message":"It is better to print here. \n\nTask %(UUID)s is aborting......(and print each few second point)","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"05efb77778da7731a5554732c313f7bd9a357f97","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                     current scenario"},{"line_number":230,"context_line":"        \"\"\""},{"line_number":231,"context_line":"        api.Task.abort(task_id, soft)"},{"line_number":232,"context_line":"        print(_(\"The abort signal is successfully sent to task \u0027%s\u0027.\") %"},{"line_number":233,"context_line":"              task_id)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"}],"source_content_type":"text/x-python","patch_set":37,"id":"3a50d1a3_6dad3ee8","line":232,"in_reply_to":"3a50d1a3_fe48805d","updated":"2015-07-28 14:02:10.000000000","message":"Sorry, I don\u0027t know  how to print each second a \u0027point\u0027 here while function executing without a bit of hardcode","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e25a3fa3cb6b99c868bcaa387b2d2f1498a85439","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        api.Task.abort(task_id, soft)"},{"line_number":236,"context_line":"        if api.objects.Task.get_status(task_id) !\u003d consts.TaskStatus.ABORTED:"},{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id)"},{"line_number":238,"context_line":"        while api.objects.Task.get_status(task_id) !\u003d \"aborted\":"},{"line_number":239,"context_line":"            print(_(\".\"))"},{"line_number":240,"context_line":"            time.sleep(1)"},{"line_number":241,"context_line":"        print(_(\"\\n\"))"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a50d1a3_8ad3505f","line":238,"updated":"2015-07-30 16:51:59.000000000","message":"Shouldn\u0027t use you the ABORTED constant here instead of the string?","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"fc2fd3ffe170583ec20e1f14aee17c944e7a41ca","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        api.Task.abort(task_id, soft)"},{"line_number":236,"context_line":"        if api.objects.Task.get_status(task_id) !\u003d consts.TaskStatus.ABORTED:"},{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id)"},{"line_number":238,"context_line":"        while api.objects.Task.get_status(task_id) !\u003d \"aborted\":"},{"line_number":239,"context_line":"            print(_(\".\"))"},{"line_number":240,"context_line":"            time.sleep(1)"},{"line_number":241,"context_line":"        print(_(\"\\n\"))"}],"source_content_type":"text/x-python","patch_set":41,"id":"1a4dcd0f_4313a866","line":238,"in_reply_to":"3a50d1a3_8ad3505f","updated":"2015-08-05 14:42:30.000000000","message":"Done","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d9d4f5a5eeeab5845b48a7a8fb3ac87790e3ce32","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id, end\u003d\"\")"},{"line_number":238,"context_line":"        while api.objects.Task.get_status(task_id) !\u003d ("},{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(_(\".\"), end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"},{"line_number":242,"context_line":"        print(_(\"\\n\"))"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"1a4dcd0f_b64db19b","line":240,"updated":"2015-08-06 20:05:58.000000000","message":"one more time do not translate period.","commit_id":"487d42b7a143386308da73298639273ff80ee63d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d9d4f5a5eeeab5845b48a7a8fb3ac87790e3ce32","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(_(\".\"), end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"},{"line_number":242,"context_line":"        print(_(\"\\n\"))"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"},{"line_number":245,"context_line":"    @envutils.with_default_task_id"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a4dcd0f_7643a96c","line":242,"updated":"2015-08-06 20:05:58.000000000","message":"do not translate new line","commit_id":"487d42b7a143386308da73298639273ff80ee63d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2774dd368fa45437481de17d4e2726d1bd69f70e","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        :param task_id: Task uuid"},{"line_number":232,"context_line":"        :param soft: if set to True, task should be aborted after execution of"},{"line_number":233,"context_line":"                     current scenario"},{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        api.Task.abort(task_id, soft)"},{"line_number":236,"context_line":"        if api.objects.Task.get_status(task_id) !\u003d consts.TaskStatus.ABORTED:"},{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id, end\u003d\"\")"}],"source_content_type":"text/x-python","patch_set":60,"id":"fa1b9901_88b43135","line":234,"updated":"2015-08-20 12:33:06.000000000","message":"Also, it would be nice to print here \"info message\". something like:\n\n  if soft:\n      print(\"INFO: please be informed that soft abort will not stop current \"\n            \"running scenario, it will prevent to start new ones, so if you \"\n            \"are running task with only one scenario - soft abort will not \"\n            \"help at all.\")","commit_id":"007cc5b0f9cc980c2877f08e5c7f06a90f14d558"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2774dd368fa45437481de17d4e2726d1bd69f70e","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        api.Task.abort(task_id, soft)"},{"line_number":236,"context_line":"        if api.objects.Task.get_status(task_id) !\u003d consts.TaskStatus.ABORTED:"},{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id, end\u003d\"\")"},{"line_number":238,"context_line":"        while api.objects.Task.get_status(task_id) !\u003d ("},{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(\".\", end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":60,"id":"fa1b9901_88ec31f4","line":238,"updated":"2015-08-20 12:33:06.000000000","message":"Why this command should wait until abort is finished? Imo, it would be nice to have this feature as optional(just add another option like \"--wait-for-finish\" or something like that).","commit_id":"007cc5b0f9cc980c2877f08e5c7f06a90f14d558"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"49ad0c86c8ff9bbba1897ba29bd46d1fc3a30176","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        api.Task.abort(task_id, soft)"},{"line_number":236,"context_line":"        if api.objects.Task.get_status(task_id) !\u003d consts.TaskStatus.ABORTED:"},{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id, end\u003d\"\")"},{"line_number":238,"context_line":"        while api.objects.Task.get_status(task_id) !\u003d ("},{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(\".\", end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":60,"id":"fa1b9901_bb393ed9","line":238,"in_reply_to":"fa1b9901_88ec31f4","updated":"2015-08-20 14:29:09.000000000","message":"This was an idea of Boris) I don\u0027t this that he would like option --wait-for-finish. This option will be decide to output dots only?","commit_id":"007cc5b0f9cc980c2877f08e5c7f06a90f14d558"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"7372f126f00990005ad6f7bec0cfea8b0e01737f","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        api.Task.abort(task_id, soft)"},{"line_number":236,"context_line":"        if api.objects.Task.get_status(task_id) !\u003d consts.TaskStatus.ABORTED:"},{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id, end\u003d\"\")"},{"line_number":238,"context_line":"        while api.objects.Task.get_status(task_id) !\u003d ("},{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(\".\", end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":60,"id":"fa1b9901_2096513f","line":238,"in_reply_to":"fa1b9901_94152741","updated":"2015-08-20 15:34:57.000000000","message":"We have disscussed this with Boris and decided to add this option later in separate patch.","commit_id":"007cc5b0f9cc980c2877f08e5c7f06a90f14d558"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"729d78012b74c90a8cbcc1e516d281404e5c82ee","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        api.Task.abort(task_id, soft)"},{"line_number":236,"context_line":"        if api.objects.Task.get_status(task_id) !\u003d consts.TaskStatus.ABORTED:"},{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id, end\u003d\"\")"},{"line_number":238,"context_line":"        while api.objects.Task.get_status(task_id) !\u003d ("},{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(\".\", end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"}],"source_content_type":"text/x-python","patch_set":60,"id":"fa1b9901_94152741","line":238,"in_reply_to":"fa1b9901_bb393ed9","updated":"2015-08-20 14:33:27.000000000","message":"\u003eThis option will be decide to output dots only?\n\nthis option should print dots and after successful finish print happy-message","commit_id":"007cc5b0f9cc980c2877f08e5c7f06a90f14d558"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"6dfca34abba62e797ad2a0e90364802133959a57","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        if api.objects.Task.get_status(task_id) !\u003d consts.TaskStatus.ABORTED:"},{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id, end\u003d\"\")"},{"line_number":238,"context_line":"        while api.objects.Task.get_status(task_id) !\u003d ("},{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(\".\", end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"},{"line_number":242,"context_line":"        print(\"\\n\")"}],"source_content_type":"text/x-python","patch_set":60,"id":"fa1b9901_9ded55b9","line":239,"updated":"2015-08-20 12:18:25.000000000","message":"You should check here that status is not finished yet(this should help with issue discovered by Li Yingjun) :)","commit_id":"007cc5b0f9cc980c2877f08e5c7f06a90f14d558"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"49ad0c86c8ff9bbba1897ba29bd46d1fc3a30176","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        if api.objects.Task.get_status(task_id) !\u003d consts.TaskStatus.ABORTED:"},{"line_number":237,"context_line":"            print(_(\"Task \u0027%s\u0027 is aborting...\") % task_id, end\u003d\"\")"},{"line_number":238,"context_line":"        while api.objects.Task.get_status(task_id) !\u003d ("},{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(\".\", end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"},{"line_number":242,"context_line":"        print(\"\\n\")"}],"source_content_type":"text/x-python","patch_set":60,"id":"fa1b9901_db799283","line":239,"in_reply_to":"fa1b9901_9ded55b9","updated":"2015-08-20 14:29:09.000000000","message":"Done","commit_id":"007cc5b0f9cc980c2877f08e5c7f06a90f14d558"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2774dd368fa45437481de17d4e2726d1bd69f70e","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(\".\", end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"},{"line_number":242,"context_line":"        print(\"\\n\")"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"},{"line_number":245,"context_line":"    @envutils.with_default_task_id"}],"source_content_type":"text/x-python","patch_set":60,"id":"fa1b9901_886751b6","line":242,"updated":"2015-08-20 12:33:06.000000000","message":"after successful finish, user expects to read a message about it. \"Yes, we did it!\"","commit_id":"007cc5b0f9cc980c2877f08e5c7f06a90f14d558"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"49ad0c86c8ff9bbba1897ba29bd46d1fc3a30176","unresolved":false,"context_lines":[{"line_number":239,"context_line":"                consts.TaskStatus.ABORTED):"},{"line_number":240,"context_line":"            print(\".\", end\u003d\"\")"},{"line_number":241,"context_line":"            time.sleep(1)"},{"line_number":242,"context_line":"        print(\"\\n\")"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"},{"line_number":245,"context_line":"    @envutils.with_default_task_id"}],"source_content_type":"text/x-python","patch_set":60,"id":"fa1b9901_bb95be87","line":242,"in_reply_to":"fa1b9901_886751b6","updated":"2015-08-20 14:29:09.000000000","message":"Done","commit_id":"007cc5b0f9cc980c2877f08e5c7f06a90f14d558"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f8744d336ee9962e31ec670e774cbebd4deeccbe","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        api.Task.abort(task_id, soft, wait\u003dTrue)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        def check_task_status():"},{"line_number":244,"context_line":"            return objects.Task.get_status(task_id) not in ["},{"line_number":245,"context_line":"                consts.TaskStatus.ABORTED, consts.TaskStatus.FINISHED,"},{"line_number":246,"context_line":"                consts.TaskStatus.FAILED]"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":67,"id":"da20952f_18f0a1fc","line":244,"updated":"2015-09-03 20:17:37.000000000","message":"We must not use objects directly here. CLI code may not have direct access to DB and objects requires direct access to DB.\n\nWe need to extend rally.api.Task with method get_status that will use objects to do that.\n\nAs well I believe that removing this code and writting directly if condition will make code cleaner","commit_id":"1445a3c27eeb8079d557273f7001e6e76f74dece"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ba7f97c0a784926a0986b21e9e9954f784d345eb","unresolved":false,"context_lines":[{"line_number":223,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"},{"line_number":224,"context_line":"    @envutils.with_default_task_id"},{"line_number":225,"context_line":"    @cliutils.args(\"--soft\", action\u003d\"store_true\","},{"line_number":226,"context_line":"                   help\u003d\"Abort task after current scenario full execution\")"},{"line_number":227,"context_line":"    def abort(self, task_id\u003dNone, soft\u003dFalse):"},{"line_number":228,"context_line":"        \"\"\"Abort started benchmarking task."},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_014025a4","line":226,"updated":"2015-09-11 06:56:32.000000000","message":"let\u0027s make async mode as well here it cost us 2 lines and we can make our users happier","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":223,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"},{"line_number":224,"context_line":"    @envutils.with_default_task_id"},{"line_number":225,"context_line":"    @cliutils.args(\"--soft\", action\u003d\"store_true\","},{"line_number":226,"context_line":"                   help\u003d\"Abort task after current scenario full execution\")"},{"line_number":227,"context_line":"    def abort(self, task_id\u003dNone, soft\u003dFalse):"},{"line_number":228,"context_line":"        \"\"\"Abort started benchmarking task."},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_ae9f4fb3","line":226,"in_reply_to":"da20952f_014025a4","updated":"2015-09-21 14:24:41.000000000","message":"let\u0027s do it in the separate patch, since it requires logic for threads(one thread for execution api.abort and another for parallel printing)","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2144d6d083082a3f0ed7b6a6a36356ee7eb2892a","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        api.Task.abort(task_id, soft, async\u003dFalse)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        print(\"Task successfully stopped.\")"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"},{"line_number":245,"context_line":"    @envutils.with_default_task_id"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_cc8944cc","line":242,"updated":"2015-09-22 06:30:27.000000000","message":"Task %(UUID)s  successfully stopped","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3c34688d9c0cb4d172b7eedc1845960c1916814c","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        api.Task.abort(task_id, soft, async\u003dFalse)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        print(\"Task successfully stopped.\")"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task\")"},{"line_number":245,"context_line":"    @envutils.with_default_task_id"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_58b96b14","line":242,"in_reply_to":"ba15a1d1_cc8944cc","updated":"2015-09-22 09:19:49.000000000","message":"Done","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"}],"rally/cmd/commands/task.py":[{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"37c7bfa78027a49639d2843f3458178a71729836","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        \"\"\"Abort started benchmarking task."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :param task_id: Task uuid"},{"line_number":233,"context_line":"        :param soft: if set to true, task should be aborted after execution of"},{"line_number":234,"context_line":"                     current scenario"},{"line_number":235,"context_line":"        \"\"\""},{"line_number":236,"context_line":"        task_status \u003d objects.Task.get(task_id)[\"status\"]"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aa53dc9_4c3975a3","line":233,"updated":"2015-04-10 08:09:41.000000000","message":"s/true/True","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":230,"context_line":"        \"\"\"Abort started benchmarking task."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :param task_id: Task uuid"},{"line_number":233,"context_line":"        :param soft: if set to true, task should be aborted after execution of"},{"line_number":234,"context_line":"                     current scenario"},{"line_number":235,"context_line":"        \"\"\""},{"line_number":236,"context_line":"        task_status \u003d objects.Task.get(task_id)[\"status\"]"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_a30eb1e2","line":233,"in_reply_to":"9aa53dc9_4c3975a3","updated":"2015-06-10 13:09:06.000000000","message":"Done","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"}],"rally/common/db/sqlalchemy/api.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"efc43db78ad0f9e580dbdb85e5ca2c7559dbfb98","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                filter_by(uuid\u003duuid).first())"},{"line_number":106,"context_line":"        if not task:"},{"line_number":107,"context_line":"            raise exceptions.TaskNotFound(uuid\u003duuid)"},{"line_number":108,"context_line":"        return task.status"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def task_get(self, uuid):"},{"line_number":111,"context_line":"        return self._task_get(uuid)"}],"source_content_type":"text/x-python","patch_set":43,"id":"1a4dcd0f_9819bf24","line":108,"updated":"2015-08-06 21:06:08.000000000","message":"There is NO reason to create separated method and not tune it to work fast. \n\nYou should query only fields that we need. Take a look at docs: \n\nhttp://docs.sqlalchemy.org/en/latest/orm/loading_columns.html#load-only-cols\n\nPlus this method should be complete removed. And we should add to _task_get_status extra filed columns, and use it in task_get_status()","commit_id":"487d42b7a143386308da73298639273ff80ee63d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"05f60e8f2cd45f7ad2dd5978462f26656388771a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            raise exceptions.TaskNotFound(uuid\u003duuid)"},{"line_number":102,"context_line":"        return task"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _task_get_status(self, uuid, session\u003dNone):"},{"line_number":105,"context_line":"        session \u003d session or get_session()"},{"line_number":106,"context_line":"        query \u003d session.query(models.Task).options("},{"line_number":107,"context_line":"            load_only(\"status\")).filter_by(uuid\u003duuid).first()"}],"source_content_type":"text/x-python","patch_set":65,"id":"fa1b9901_41f9687f","line":104,"updated":"2015-08-25 00:35:18.000000000","message":"This is copy pasted _task_get method. As I said before you should extend _task_get method instead creating one more hard coded and useless method. \n\n  def _task_get(self, uuid, load_only\u003dNone, session\u003dNone):\n    ...\n\nif load_only is not specify load everything otherwise load only specified columns","commit_id":"c3450ebb3b9490a53e6d87f9d6a79d31ec6fbacb"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f5606e6f1960a983c65d3b45bfdec4ddb33fc0e7","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            raise exceptions.TaskNotFound(uuid\u003duuid)"},{"line_number":102,"context_line":"        return task"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _task_get_status(self, uuid, session\u003dNone):"},{"line_number":105,"context_line":"        session \u003d session or get_session()"},{"line_number":106,"context_line":"        query \u003d session.query(models.Task).options("},{"line_number":107,"context_line":"            load_only(\"status\")).filter_by(uuid\u003duuid).first()"}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_1a9f4751","line":104,"in_reply_to":"fa1b9901_41f9687f","updated":"2015-09-03 16:33:15.000000000","message":"Done","commit_id":"c3450ebb3b9490a53e6d87f9d6a79d31ec6fbacb"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"05f60e8f2cd45f7ad2dd5978462f26656388771a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            task.update(values)"},{"line_number":140,"context_line":"        return task"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def task_update_status_in_abort(self, uuid, statuses, status_value):"},{"line_number":143,"context_line":"        session \u003d get_session()"},{"line_number":144,"context_line":"        query \u003d ("},{"line_number":145,"context_line":"            session.query(models.Task).filter("}],"source_content_type":"text/x-python","patch_set":65,"id":"fa1b9901_613b4c39","line":142,"updated":"2015-08-25 00:35:18.000000000","message":"this is quite bad method because it is to hardcoded.\n\n  def task_update_status(self, uuid, new_status, allowed_status):\n      # do here common code","commit_id":"c3450ebb3b9490a53e6d87f9d6a79d31ec6fbacb"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"55f591533d05cdaaaa06de1d982a88de220d7dfa","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            task.update(values)"},{"line_number":140,"context_line":"        return task"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def task_update_status_in_abort(self, uuid, statuses, status_value):"},{"line_number":143,"context_line":"        session \u003d get_session()"},{"line_number":144,"context_line":"        query \u003d ("},{"line_number":145,"context_line":"            session.query(models.Task).filter("}],"source_content_type":"text/x-python","patch_set":65,"id":"fa1b9901_930016ad","line":142,"in_reply_to":"fa1b9901_613b4c39","updated":"2015-08-25 14:33:24.000000000","message":"You have suggested to me previously to create such method.","commit_id":"c3450ebb3b9490a53e6d87f9d6a79d31ec6fbacb"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f5606e6f1960a983c65d3b45bfdec4ddb33fc0e7","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            task.update(values)"},{"line_number":140,"context_line":"        return task"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def task_update_status_in_abort(self, uuid, statuses, status_value):"},{"line_number":143,"context_line":"        session \u003d get_session()"},{"line_number":144,"context_line":"        query \u003d ("},{"line_number":145,"context_line":"            session.query(models.Task).filter("}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_dabf8fa8","line":142,"in_reply_to":"fa1b9901_613b4c39","updated":"2015-09-03 16:33:15.000000000","message":"it sounds like only rename. done","commit_id":"c3450ebb3b9490a53e6d87f9d6a79d31ec6fbacb"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"27dd334d072c1decfce16eda963f6d8dbf103105","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            task.update(values)"},{"line_number":140,"context_line":"        return task"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def task_update_status_in_abort(self, uuid, statuses, status_value):"},{"line_number":143,"context_line":"        session \u003d get_session()"},{"line_number":144,"context_line":"        query \u003d ("},{"line_number":145,"context_line":"            session.query(models.Task).filter("}],"source_content_type":"text/x-python","patch_set":65,"id":"fa1b9901_982ca703","line":142,"in_reply_to":"fa1b9901_930016ad","updated":"2015-08-25 18:31:11.000000000","message":"I didn\u0027t suggest you to create it absoluelly hardcoded","commit_id":"c3450ebb3b9490a53e6d87f9d6a79d31ec6fbacb"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f8744d336ee9962e31ec670e774cbebd4deeccbe","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def task_update_status(self, uuid, statuses, status_value):"},{"line_number":138,"context_line":"        session \u003d get_session()"},{"line_number":139,"context_line":"        query \u003d ("},{"line_number":140,"context_line":"            session.query(models.Task).filter("},{"line_number":141,"context_line":"                models.Task.uuid \u003d\u003d uuid, models.Task.status.in_("},{"line_number":142,"context_line":"                    statuses))."}],"source_content_type":"text/x-python","patch_set":67,"id":"da20952f_b8fdf5b2","line":139,"updated":"2015-09-03 20:17:37.000000000","message":"it\u0027s not query. \nIt\u0027s result and as far as I remember it doesn\u0027t do what you want (e.g. amount of changed rows).\n\nDid you test this by hands?","commit_id":"1445a3c27eeb8079d557273f7001e6e76f74dece"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"55dc49dc2b3384f62b02455bd0142193af97ee40","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        return query"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def _task_get(self, uuid, load_only\u003dNone, session\u003dNone):"},{"line_number":98,"context_line":"        pre_query \u003d self.model_query(models.Task, session\u003dsession)"},{"line_number":99,"context_line":"        if load_only:"},{"line_number":100,"context_line":"            pre_query \u003d pre_query.options(sa_loadonly(load_only))"}],"source_content_type":"text/x-python","patch_set":77,"id":"ba15a1d1_9a4edb6d","line":97,"updated":"2015-09-23 11:19:38.000000000","message":"Since named arguments also works as positional, I recommend to put new named arguments to the end of definition - this will keep backward compatibility","commit_id":"3a80e37e0d3517edfc5f83f35e0125adcfaee2a0"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3853aa44939a1101b152e002db58afa12bff40a4","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        return query"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def _task_get(self, uuid, load_only\u003dNone, session\u003dNone):"},{"line_number":98,"context_line":"        pre_query \u003d self.model_query(models.Task, session\u003dsession)"},{"line_number":99,"context_line":"        if load_only:"},{"line_number":100,"context_line":"            pre_query \u003d pre_query.options(sa_loadonly(load_only))"}],"source_content_type":"text/x-python","patch_set":77,"id":"ba15a1d1_ae2cc199","line":97,"in_reply_to":"ba15a1d1_9a4edb6d","updated":"2015-09-23 11:33:52.000000000","message":"this is private method, we should not take care about backward compatibility here:)","commit_id":"3a80e37e0d3517edfc5f83f35e0125adcfaee2a0"}],"rally/common/db/sqlalchemy/models.py":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"27b14ed13499ed1df67886b742b898a2b0c10332","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    id \u003d sa.Column(sa.Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":148,"context_line":"    uuid \u003d sa.Column(sa.String(36), default\u003dUUID, nullable\u003dFalse)"},{"line_number":149,"context_line":"    status \u003d sa.Column(sa.String(36),"},{"line_number":150,"context_line":"                       default\u003dconsts.TaskStatus.INIT,"},{"line_number":151,"context_line":"                       nullable\u003dFalse)"},{"line_number":152,"context_line":"    verification_log \u003d sa.Column(sa.Text, default\u003d\"\")"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_3c9ed454","line":149,"updated":"2015-09-10 12:16:08.000000000","message":"Hm. Whats wrong with enum? Probably we should left a note.","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"fc76f3e893e4d2a891e4273fa02d685e924aceab","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    id \u003d sa.Column(sa.Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":148,"context_line":"    uuid \u003d sa.Column(sa.String(36), default\u003dUUID, nullable\u003dFalse)"},{"line_number":149,"context_line":"    status \u003d sa.Column(sa.String(36),"},{"line_number":150,"context_line":"                       default\u003dconsts.TaskStatus.INIT,"},{"line_number":151,"context_line":"                       nullable\u003dFalse)"},{"line_number":152,"context_line":"    verification_log \u003d sa.Column(sa.Text, default\u003d\"\")"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_812c354b","line":149,"in_reply_to":"da20952f_3c9ed454","updated":"2015-09-11 06:35:27.000000000","message":"Actually I was asking this. And after some rethinking we should return here Enum otherwise we may face issues related to performance.","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    id \u003d sa.Column(sa.Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":148,"context_line":"    uuid \u003d sa.Column(sa.String(36), default\u003dUUID, nullable\u003dFalse)"},{"line_number":149,"context_line":"    status \u003d sa.Column(sa.String(36),"},{"line_number":150,"context_line":"                       default\u003dconsts.TaskStatus.INIT,"},{"line_number":151,"context_line":"                       nullable\u003dFalse)"},{"line_number":152,"context_line":"    verification_log \u003d sa.Column(sa.Text, default\u003d\"\")"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_3fbfa6fd","line":149,"in_reply_to":"da20952f_3c9ed454","updated":"2015-09-21 14:24:41.000000000","message":"each time when we add new TaskStatus, all existing databases become invalid.\n\nok, if you want it...","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"}],"rally/common/objects/task.py":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"27b14ed13499ed1df67886b742b898a2b0c10332","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    def update_status(self, status):"},{"line_number":158,"context_line":"        self._update({\"status\": status})"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _update_status_in_abort(self, soft\u003dFalse):"},{"line_number":161,"context_line":"        possible_statuses \u003d [consts.TaskStatus.RUNNING,"},{"line_number":162,"context_line":"                             consts.TaskStatus.SOFT_ABORTING]"},{"line_number":163,"context_line":"        new_status \u003d (consts.TaskStatus.SOFT_ABORTING"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_7cea0c76","line":160,"updated":"2015-09-10 12:16:08.000000000","message":"Name of this method looks weird. _set_aborted looks better. Also not sure if this should be in separate method. This code may be moved to abort method. \n\nAlso status may be changed before line 169. It better show just \"Task was probably finished while trying to abort. Please check task status or try again.\"","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    def update_status(self, status):"},{"line_number":158,"context_line":"        self._update({\"status\": status})"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _update_status_in_abort(self, soft\u003dFalse):"},{"line_number":161,"context_line":"        possible_statuses \u003d [consts.TaskStatus.RUNNING,"},{"line_number":162,"context_line":"                             consts.TaskStatus.SOFT_ABORTING]"},{"line_number":163,"context_line":"        new_status \u003d (consts.TaskStatus.SOFT_ABORTING"}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_cebde303","line":160,"in_reply_to":"da20952f_211e890c","updated":"2015-09-21 14:24:41.000000000","message":"Done","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ba7f97c0a784926a0986b21e9e9954f784d345eb","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    def update_status(self, status):"},{"line_number":158,"context_line":"        self._update({\"status\": status})"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _update_status_in_abort(self, soft\u003dFalse):"},{"line_number":161,"context_line":"        possible_statuses \u003d [consts.TaskStatus.RUNNING,"},{"line_number":162,"context_line":"                             consts.TaskStatus.SOFT_ABORTING]"},{"line_number":163,"context_line":"        new_status \u003d (consts.TaskStatus.SOFT_ABORTING"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_211e890c","line":160,"in_reply_to":"da20952f_7cea0c76","updated":"2015-09-11 06:56:32.000000000","message":"I still do not understand why this method is hardcoded. \n\n  def _update_status(allowed_status, new_status): \n     ...","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2144d6d083082a3f0ed7b6a6a36356ee7eb2892a","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        current_status \u003d self.get_status(self.task[\"uuid\"])"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        # TODO(andreykurilin): allow abort for each state."},{"line_number":389,"context_line":"        not_implemented_stages \u003d [consts.TaskStatus.VERIFYING,"},{"line_number":390,"context_line":"                                  consts.TaskStatus.INIT]"},{"line_number":391,"context_line":"        if current_status in not_implemented_stages:"},{"line_number":392,"context_line":"            raise exceptions.RallyException("}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_4c4a1485","line":389,"updated":"2015-09-22 06:30:27.000000000","message":"I see the same consts here: https://review.openstack.org/#/c/161636/74/rally/api.py","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"80bbfeea8481cac34d78adc6a8ca4668dc32f87b","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        current_status \u003d self.get_status(self.task[\"uuid\"])"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        # TODO(andreykurilin): allow abort for each state."},{"line_number":389,"context_line":"        not_implemented_stages \u003d [consts.TaskStatus.VERIFYING,"},{"line_number":390,"context_line":"                                  consts.TaskStatus.INIT]"},{"line_number":391,"context_line":"        if current_status in not_implemented_stages:"},{"line_number":392,"context_line":"            raise exceptions.RallyException("}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_cc3dbdde","line":389,"in_reply_to":"ba15a1d1_4c4a1485","updated":"2015-09-22 09:51:30.000000000","message":"Done","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"b7ef6791e7357c18ce486f2a1687ba1c064dabf1","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        new_status \u003d (consts.TaskStatus.SOFT_ABORTING"},{"line_number":410,"context_line":"                      if soft else consts.TaskStatus.ABORTING)"},{"line_number":411,"context_line":"        self.update_status(new_status, allowed_statuses\u003d("},{"line_number":412,"context_line":"            consts.TaskStatus.RUNNING, consts.TaskStatus.SOFT_ABORTING))"}],"source_content_type":"text/x-python","patch_set":79,"id":"ba15a1d1_17bff9aa","line":412,"updated":"2015-09-23 14:42:44.000000000","message":"It seems that we just update status in db, but not kill the running process?","commit_id":"199c77933bf96b4a8bbfe415e2cb486ffad8c4be"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"fb15ce9c5e9991c615e4c6ad0ba67441a09644dd","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        new_status \u003d (consts.TaskStatus.SOFT_ABORTING"},{"line_number":410,"context_line":"                      if soft else consts.TaskStatus.ABORTING)"},{"line_number":411,"context_line":"        self.update_status(new_status, allowed_statuses\u003d("},{"line_number":412,"context_line":"            consts.TaskStatus.RUNNING, consts.TaskStatus.SOFT_ABORTING))"}],"source_content_type":"text/x-python","patch_set":79,"id":"ba15a1d1_757f4d17","line":412,"in_reply_to":"ba15a1d1_17bff9aa","updated":"2015-09-23 14:44:28.000000000","message":"ignore the above please, when I read the codes here I didn\u0027t find the runner.abort() in next changed file","commit_id":"199c77933bf96b4a8bbfe415e2cb486ffad8c4be"}],"rally/consts.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e8beb235c735c6cef185dd613fdefc772672af7f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    SOFT_ABORTING \u003d \"soft_aborting\""},{"line_number":60,"context_line":"    ABORTED \u003d \"aborted\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"CHECK_ABORTING_INTERVAL \u003d 2"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class _DeployStatus(utils.ImmutableMixin, utils.EnumMixin):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aa53dc9_805abd28","line":62,"updated":"2015-04-09 15:04:17.000000000","message":"Let\u0027s move this variable to config","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    SOFT_ABORTING \u003d \"soft_aborting\""},{"line_number":60,"context_line":"    ABORTED \u003d \"aborted\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"CHECK_ABORTING_INTERVAL \u003d 2"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class _DeployStatus(utils.ImmutableMixin, utils.EnumMixin):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_03a58545","line":62,"in_reply_to":"9aa53dc9_805abd28","updated":"2015-06-10 13:09:06.000000000","message":"Done","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1377dd8f1df274851761e73e91d331679e84c1b2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    SOFT_ABORTING \u003d \"soft_aborting\""},{"line_number":60,"context_line":"    ABORTED \u003d \"aborted\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"CHECK_ABORTING_INTERVAL \u003d 2"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class _DeployStatus(utils.ImmutableMixin, utils.EnumMixin):"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa32b979_5b2518ac","line":62,"updated":"2015-06-20 08:28:02.000000000","message":"this variable is not used at all","commit_id":"df1cd03e4e30f886126af4b47f469a871e36cb4e"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ba7f97c0a784926a0986b21e9e9954f784d345eb","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    CLEANING_UP \u003d \"cleaning up\""},{"line_number":56,"context_line":"    FINISHED \u003d \"finished\""},{"line_number":57,"context_line":"    FAILED \u003d \"failed\""},{"line_number":58,"context_line":"    ABORTING \u003d \"aborting\""},{"line_number":59,"context_line":"    SOFT_ABORTING \u003d \"soft_aborting\""},{"line_number":60,"context_line":"    ABORTED \u003d \"aborted\""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_a1bff9ce","line":58,"updated":"2015-09-11 06:56:32.000000000","message":"Let\u0027s add one more variable here: \n\n   PAUSED  \u003d \"paused\"\n\nso we won\u0027t force people to change schema between 0.1.0 and  0.1.1 versions","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    CLEANING_UP \u003d \"cleaning up\""},{"line_number":56,"context_line":"    FINISHED \u003d \"finished\""},{"line_number":57,"context_line":"    FAILED \u003d \"failed\""},{"line_number":58,"context_line":"    ABORTING \u003d \"aborting\""},{"line_number":59,"context_line":"    SOFT_ABORTING \u003d \"soft_aborting\""},{"line_number":60,"context_line":"    ABORTED \u003d \"aborted\""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_2e6a5f1b","line":58,"in_reply_to":"da20952f_a1bff9ce","updated":"2015-09-21 14:24:41.000000000","message":"Done","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"}],"rally/db/sqlalchemy/api.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e25a3fa3cb6b99c868bcaa387b2d2f1498a85439","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return self._task_get(uuid)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def task_get_status(self, uuid):"},{"line_number":114,"context_line":"        return self._task_get_status(uuid)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def task_get_detailed(self, uuid):"},{"line_number":117,"context_line":"        return (self.model_query(models.Task)."}],"source_content_type":"text/x-python","patch_set":41,"id":"3a50d1a3_6a2a8431","line":114,"updated":"2015-07-30 16:51:59.000000000","message":"Why doesn\u0027t this just use _task_get()? _task_get_status() duplicates a lot of code. This could just be:\n\n    def task_get_status(self, uuid):\n        return self._task_get(uuid).status","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"61442acdeb99959cf64053ac3d790f19c4060e29","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return self._task_get(uuid)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def task_get_status(self, uuid):"},{"line_number":114,"context_line":"        return self._task_get_status(uuid)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def task_get_detailed(self, uuid):"},{"line_number":117,"context_line":"        return (self.model_query(models.Task)."}],"source_content_type":"text/x-python","patch_set":41,"id":"1a4dcd0f_271288b5","line":114,"in_reply_to":"3a50d1a3_6a2a8431","updated":"2015-08-03 21:18:34.000000000","message":"It\u0027s not duplication of code, task_get_status should fetch only one field from DB and work fast.","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"}],"rally/objects/task.py":[{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"196f30a3589d97d378dd0dbba93f9fec730a63fc","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        return Task(db.task_get(uuid))"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def get_status(self):"},{"line_number":140,"context_line":"        return db.task_get(self.task[\"uuid\"]).status"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @staticmethod"},{"line_number":143,"context_line":"    def list(status\u003dNone, deployment\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_c48c8682","line":140,"updated":"2015-03-11 13:11:43.000000000","message":"I wonder, doesn\u0027t it work just with\n\n    return self.task[\"status\"]\n\n?","commit_id":"fa797163cccfd97bd3a407c631648995412960a7"}],"rally/task/engine.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"e88eecf31d6db106e89886705cf032ed1b3d97ee","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                                  \"sla\": sla_checker.results()})"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def check_task_aborting(self, task, is_done, runner_obj):"},{"line_number":333,"context_line":"        \"\"\"Check if task status is aborting and abort runner in this case."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        Has to be run from different thread simultaneously with the runner.run"},{"line_number":336,"context_line":"        method."}],"source_content_type":"text/x-python","patch_set":37,"id":"3a50d1a3_69f32e0b","line":333,"updated":"2015-07-27 20:47:05.000000000","message":"aborting -\u003e \u0027aborting\u0027","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"975481ddb9f6db84c80cf6dbd74dbe8b9ddc9a60","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                task_status \u003d objects.Task.get_status(self.task[\"uuid\"])"},{"line_number":252,"context_line":"                if task_status in [consts.TaskStatus.SOFT_ABORTING,"},{"line_number":253,"context_line":"                                   consts.TaskStatus.ABORTING]:"},{"line_number":254,"context_line":"                    LOG.info(\"Received aborting signal.\")"},{"line_number":255,"context_line":"                    self.task.update_status(consts.TaskStatus.ABORTED)"},{"line_number":256,"context_line":"                    return"},{"line_number":257,"context_line":"                key \u003d {\"name\": name, \"pos\": n, \"kw\": kw}"}],"source_content_type":"text/x-python","patch_set":46,"id":"1a4dcd0f_1d8d387b","line":254,"updated":"2015-08-10 11:18:03.000000000","message":"It is not signal actually. Maybe \"Task abort requested\"?","commit_id":"44676a33ba6aafab6fb2a360aa485e221cc0d6b3"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f8744d336ee9962e31ec670e774cbebd4deeccbe","unresolved":false,"context_lines":[{"line_number":38,"context_line":"from rally.task import sla"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"BENCHMARK_ENGINE_OPTS \u003d ["},{"line_number":42,"context_line":"    cfg.FloatOpt(\"check_aborting_interval\","},{"line_number":43,"context_line":"                 default\u003d2.0,"},{"line_number":44,"context_line":"                 help\u003d\"Time to sleep in the benchmark engine between two \""}],"source_content_type":"text/x-python","patch_set":67,"id":"da20952f_38e9e5b7","line":41,"updated":"2015-09-03 20:17:37.000000000","message":"I really don\u0027t know who will use this parameter.... it\u0027s internal stuff...","commit_id":"1445a3c27eeb8079d557273f7001e6e76f74dece"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ba7f97c0a784926a0986b21e9e9954f784d345eb","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"BENCHMARK_ENGINE_OPTS \u003d ["},{"line_number":42,"context_line":"    cfg.FloatOpt(\"check_aborting_interval\","},{"line_number":43,"context_line":"                 default\u003d2.0,"},{"line_number":44,"context_line":"                 help\u003d\"Time to sleep in the benchmark engine between two \""},{"line_number":45,"context_line":"                      \"consecutive checks for whether the currently running \""},{"line_number":46,"context_line":"                      \"task should be aborted.\")"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_c1c46d61","line":43,"updated":"2015-09-11 06:56:32.000000000","message":"Still not sure should we allow users to touch this argument? \n\nAny use case for this? \n\nHaving billions useless options in rally.conf makes me sad...","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"BENCHMARK_ENGINE_OPTS \u003d ["},{"line_number":42,"context_line":"    cfg.FloatOpt(\"check_aborting_interval\","},{"line_number":43,"context_line":"                 default\u003d2.0,"},{"line_number":44,"context_line":"                 help\u003d\"Time to sleep in the benchmark engine between two \""},{"line_number":45,"context_line":"                      \"consecutive checks for whether the currently running \""},{"line_number":46,"context_line":"                      \"task should be aborted.\")"}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_aecbcf1d","line":43,"in_reply_to":"da20952f_c1c46d61","updated":"2015-09-21 14:24:41.000000000","message":"You are right. removed","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ba7f97c0a784926a0986b21e9e9954f784d345eb","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    }"},{"line_number":87,"context_line":"}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class ResultConsumer(object):"},{"line_number":91,"context_line":"    \"\"\"ResultConsumer class stores results from ScenarioRunner, checks SLA.\"\"\""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_61832104","line":89,"updated":"2015-09-11 06:56:32.000000000","message":"maybe we should rename this to something like \n\nclass TaskExecutionManager(object): \n   ...\n\nbecause now we have sla_on_failure and abort functionallity and soon we will have pause/unpause","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    }"},{"line_number":87,"context_line":"}"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class ResultConsumer(object):"},{"line_number":91,"context_line":"    \"\"\"ResultConsumer class stores results from ScenarioRunner, checks SLA.\"\"\""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_8e628b15","line":89,"in_reply_to":"da20952f_61832104","updated":"2015-09-21 14:24:41.000000000","message":"Let\u0027s do it in a separate patch.","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"ba7f97c0a784926a0986b21e9e9954f784d345eb","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        self.task.update_status(consts.TaskStatus.RUNNING)"},{"line_number":333,"context_line":"        for name in self.config:"},{"line_number":334,"context_line":"            for n, kw in enumerate(self.config[name]):"},{"line_number":335,"context_line":"                task_status \u003d objects.Task.get_status(self.task[\"uuid\"])"},{"line_number":336,"context_line":"                if task_status in [consts.TaskStatus.SOFT_ABORTING,"},{"line_number":337,"context_line":"                                   consts.TaskStatus.ABORTING]:"},{"line_number":338,"context_line":"                    LOG.info(\"Received aborting signal.\")"}],"source_content_type":"text/x-python","patch_set":72,"id":"da20952f_216be91f","line":335,"updated":"2015-09-11 06:56:32.000000000","message":"Can we move this to static method of ResultConsumer and reuse in both places here and inside ResumeConsumer, like: \n\n\n  if ResultConsumer.is_task_aborted(): \n    return","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        self.task.update_status(consts.TaskStatus.RUNNING)"},{"line_number":333,"context_line":"        for name in self.config:"},{"line_number":334,"context_line":"            for n, kw in enumerate(self.config[name]):"},{"line_number":335,"context_line":"                task_status \u003d objects.Task.get_status(self.task[\"uuid\"])"},{"line_number":336,"context_line":"                if task_status in [consts.TaskStatus.SOFT_ABORTING,"},{"line_number":337,"context_line":"                                   consts.TaskStatus.ABORTING]:"},{"line_number":338,"context_line":"                    LOG.info(\"Received aborting signal.\")"}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_2910194e","line":335,"in_reply_to":"da20952f_216be91f","updated":"2015-09-21 14:24:41.000000000","message":"Done","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2144d6d083082a3f0ed7b6a6a36356ee7eb2892a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \"sla\": self.sla_checker.results()})"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @staticmethod"},{"line_number":145,"context_line":"    def is_task_aborting(task_uuid, check_soft\u003dTrue):"},{"line_number":146,"context_line":"        \"\"\"Checks task is in abort stages"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        :param task_uuid: UUID of task to check status"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_d259da36","line":145,"updated":"2015-09-22 06:30:27.000000000","message":"is_task_aborted","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"80bbfeea8481cac34d78adc6a8ca4668dc32f87b","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \"sla\": self.sla_checker.results()})"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    @staticmethod"},{"line_number":145,"context_line":"    def is_task_aborting(task_uuid, check_soft\u003dTrue):"},{"line_number":146,"context_line":"        \"\"\"Checks task is in abort stages"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        :param task_uuid: UUID of task to check status"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_2c4b195b","line":145,"in_reply_to":"ba15a1d1_d259da36","updated":"2015-09-22 09:51:30.000000000","message":"`is_task_aborted` will mislead, since this method doesn\u0027t check final status \"ABORTED\".\n\nrenamed to \"is_task_in_aborting_status\"","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"2144d6d083082a3f0ed7b6a6a36356ee7eb2892a","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            stages.append(consts.TaskStatus.SOFT_ABORTING)"},{"line_number":156,"context_line":"        return objects.Task.get_status(task_uuid) in stages"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def check_task_aborting(self):"},{"line_number":159,"context_line":"        \"\"\"Check if task status is \u0027aborting\u0027 and abort runner in this case."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        Has to be run from different thread simultaneously with the runner.run"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_3234d6dc","line":158,"updated":"2015-09-22 06:30:27.000000000","message":"this is very misleading name. You are aborting runner not just check that task is aborting.","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"80bbfeea8481cac34d78adc6a8ca4668dc32f87b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            stages.append(consts.TaskStatus.SOFT_ABORTING)"},{"line_number":156,"context_line":"        return objects.Task.get_status(task_uuid) in stages"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def check_task_aborting(self):"},{"line_number":159,"context_line":"        \"\"\"Check if task status is \u0027aborting\u0027 and abort runner in this case."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        Has to be run from different thread simultaneously with the runner.run"}],"source_content_type":"text/x-python","patch_set":74,"id":"ba15a1d1_2cf1d9cd","line":158,"in_reply_to":"ba15a1d1_3234d6dc","updated":"2015-09-22 09:51:30.000000000","message":"Done","commit_id":"fd659ef93b167486a6ed101376d84efb950fdf67"}],"rally/task/sla.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"aa914d2b61f58628ff2f842ec6398ab40c85effc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if self.aborted_manually:"},{"line_number":68,"context_line":"            results.append(_format_result("},{"line_number":69,"context_line":"                \"aborted_manually\", True,"},{"line_number":70,"context_line":"                _(\"Task was aborted due to abort signal.\")))"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        if self.unexpected_failure:"},{"line_number":73,"context_line":"            results.append(_format_result("}],"source_content_type":"text/x-python","patch_set":37,"id":"3a50d1a3_fee4003c","line":70,"updated":"2015-07-20 21:09:16.000000000","message":"It should be False.  Otherwise: \n\n\n+-------------+-----+------------------+--------+---------------------------------------+\n| benchmark   | pos | criterion        | status | detail                                |\n+-------------+-----+------------------+--------+---------------------------------------+\n| Dummy.dummy | 0   | aborted_manually | PASS   | Task was aborted due to abort signal. |\n+-------------+-----+------------------+--------+---------------------------------------+\nboris@ubuntu:~$ echo $?\n0","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"e88eecf31d6db106e89886705cf032ed1b3d97ee","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        if self.aborted_manually:"},{"line_number":68,"context_line":"            results.append(_format_result("},{"line_number":69,"context_line":"                \"aborted_manually\", True,"},{"line_number":70,"context_line":"                _(\"Task was aborted due to abort signal.\")))"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        if self.unexpected_failure:"},{"line_number":73,"context_line":"            results.append(_format_result("}],"source_content_type":"text/x-python","patch_set":37,"id":"3a50d1a3_4d575b02","line":70,"updated":"2015-07-27 20:47:05.000000000","message":"Two forms of one word not too much in one sentence? \"Task was stopped/interrupt due to abort signal\"","commit_id":"9f70ef40d8f4df40a3b37e2087995002b3fdcba2"}],"tests/functional/test_cli_task.py":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"44c619d5cbee2b2a4ac281f00c70b5a5f9c227a8","unresolved":false,"context_lines":[{"line_number":545,"context_line":"            ]"},{"line_number":546,"context_line":"        }"},{"line_number":547,"context_line":"        rally \u003d utils.Rally()"},{"line_number":548,"context_line":"        with mock.patch.dict(\"os.environ\", utils.TEST_ENV):"},{"line_number":549,"context_line":"            task, uuid \u003d self._start_task_in_new_thread("},{"line_number":550,"context_line":"                rally, cfg, \"test_abort-thread_with_abort.txt\")"},{"line_number":551,"context_line":"            abort_result \u003d rally(\"task abort\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aa53dc9_83ebe777","line":548,"updated":"2015-04-09 15:45:55.000000000","message":"This is not necessary. There is no deployments created. You may safely remove this line","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":545,"context_line":"            ]"},{"line_number":546,"context_line":"        }"},{"line_number":547,"context_line":"        rally \u003d utils.Rally()"},{"line_number":548,"context_line":"        with mock.patch.dict(\"os.environ\", utils.TEST_ENV):"},{"line_number":549,"context_line":"            task, uuid \u003d self._start_task_in_new_thread("},{"line_number":550,"context_line":"                rally, cfg, \"test_abort-thread_with_abort.txt\")"},{"line_number":551,"context_line":"            abort_result \u003d rally(\"task abort\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_c60bfbd4","line":548,"in_reply_to":"9aa53dc9_83ebe777","updated":"2015-06-10 13:09:06.000000000","message":"Done","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"44c619d5cbee2b2a4ac281f00c70b5a5f9c227a8","unresolved":false,"context_lines":[{"line_number":548,"context_line":"        with mock.patch.dict(\"os.environ\", utils.TEST_ENV):"},{"line_number":549,"context_line":"            task, uuid \u003d self._start_task_in_new_thread("},{"line_number":550,"context_line":"                rally, cfg, \"test_abort-thread_with_abort.txt\")"},{"line_number":551,"context_line":"            abort_result \u003d rally(\"task abort\")"},{"line_number":552,"context_line":"            expected_msg \u003d \"Aborting Task %s\\n\" % uuid"},{"line_number":553,"context_line":"            self.assertEqual(abort_result, expected_msg)"},{"line_number":554,"context_line":"            task.join()"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aa53dc9_de7662a3","line":551,"updated":"2015-04-09 15:45:55.000000000","message":"Please use different instance of Rally here.","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":548,"context_line":"        with mock.patch.dict(\"os.environ\", utils.TEST_ENV):"},{"line_number":549,"context_line":"            task, uuid \u003d self._start_task_in_new_thread("},{"line_number":550,"context_line":"                rally, cfg, \"test_abort-thread_with_abort.txt\")"},{"line_number":551,"context_line":"            abort_result \u003d rally(\"task abort\")"},{"line_number":552,"context_line":"            expected_msg \u003d \"Aborting Task %s\\n\" % uuid"},{"line_number":553,"context_line":"            self.assertEqual(abort_result, expected_msg)"},{"line_number":554,"context_line":"            task.join()"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_e6bdd7d8","line":551,"in_reply_to":"9aa53dc9_de7662a3","updated":"2015-06-10 13:09:06.000000000","message":"Done","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"37c7bfa78027a49639d2843f3458178a71729836","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            results \u003d json.loads(rally(\"task results\"))"},{"line_number":591,"context_line":"            iterations_completed \u003d len(results[0][\"result\"])"},{"line_number":592,"context_line":"            # check task is stopped after first runner fully performed"},{"line_number":593,"context_line":"            self.assertEqual(iterations_completed, 3)"},{"line_number":594,"context_line":"            self.assertIn(\"aborted\", rally(\"task status\"))"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def test_use(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9aa53dc9_4c6055a5","line":593,"updated":"2015-04-10 08:09:41.000000000","message":"You should also check here that the scenario was not started for the second time. This is very important.","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"7300ba4ac7931bc70e1b4185ba62e10a38ff50e8","unresolved":false,"context_lines":[{"line_number":590,"context_line":"            results \u003d json.loads(rally(\"task results\"))"},{"line_number":591,"context_line":"            iterations_completed \u003d len(results[0][\"result\"])"},{"line_number":592,"context_line":"            # check task is stopped after first runner fully performed"},{"line_number":593,"context_line":"            self.assertEqual(iterations_completed, 3)"},{"line_number":594,"context_line":"            self.assertIn(\"aborted\", rally(\"task status\"))"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    def test_use(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3afb71cf_66d567e6","line":593,"in_reply_to":"9aa53dc9_4c6055a5","updated":"2015-06-10 13:09:06.000000000","message":"Done","commit_id":"61b1cc053ff42d890e4dc32050f7ff56cc0d399c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"8592e04c7994b740f2c1e4b5c412bc4993753049","unresolved":false,"context_lines":[{"line_number":551,"context_line":"        }"},{"line_number":552,"context_line":"        self._test_start_abort_on_sla_failure(cfg, times)"},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"    def _start_task_in_new_thread(self, rally, cfg, report_file):"},{"line_number":555,"context_line":"        deployment_id \u003d envutils.get_global(\"RALLY_DEPLOYMENT\")"},{"line_number":556,"context_line":"        config \u003d utils.TaskConfig(cfg)"},{"line_number":557,"context_line":"        cmd \u003d ((\"task start --task %(task_file)s \""}],"source_content_type":"text/x-python","patch_set":23,"id":"fa32b979_1b0e09e5","line":554,"updated":"2015-06-18 10:45:56.000000000","message":"this code is broken and produce race. without changes in this module, everything is work - https://review.openstack.org/#/c/193034/1","commit_id":"d1b8861438e9ffd0d1c72e03c32a952afcfd79c2"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e25a3fa3cb6b99c868bcaa387b2d2f1498a85439","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        return task, uuid"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_abort(self):"},{"line_number":569,"context_line":"        RUNNER_TIMES \u003d 10"},{"line_number":570,"context_line":"        cfg \u003d {"},{"line_number":571,"context_line":"            \"Dummy.dummy\": ["},{"line_number":572,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a50d1a3_2a331c64","line":569,"updated":"2015-07-30 16:51:59.000000000","message":"Why ALL CAPS?","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"fc2fd3ffe170583ec20e1f14aee17c944e7a41ca","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        return task, uuid"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_abort(self):"},{"line_number":569,"context_line":"        RUNNER_TIMES \u003d 10"},{"line_number":570,"context_line":"        cfg \u003d {"},{"line_number":571,"context_line":"            \"Dummy.dummy\": ["},{"line_number":572,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":41,"id":"1a4dcd0f_9e2a637d","line":569,"in_reply_to":"3a50d1a3_2a331c64","updated":"2015-08-05 14:42:30.000000000","message":"Because its a const","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e25a3fa3cb6b99c868bcaa387b2d2f1498a85439","unresolved":false,"context_lines":[{"line_number":629,"context_line":"        iterations_completed \u003d len(results[0][\"result\"])"},{"line_number":630,"context_line":"        # NOTE(msdubov): check that the task is stopped after first runner"},{"line_number":631,"context_line":"        #                benchmark finished all its iterations"},{"line_number":632,"context_line":"        self.assertEqual(iterations_completed, 3)"},{"line_number":633,"context_line":"        # NOTE(msdubov): check that the next benchmark scenario is not started"},{"line_number":634,"context_line":"        self.assertEqual(len(results), 1)"},{"line_number":635,"context_line":"        self.assertIn(\"aborted\", rally(\"task status\"))"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a50d1a3_8a98301d","line":632,"updated":"2015-07-30 16:51:59.000000000","message":"This seems very sensitive to timing. I prefer the condition in test_abort() where you merely check to ensure that it runs fewer than the number of expected times.","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"}],"tests/unit/cli/commands/test_task.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e25a3fa3cb6b99c868bcaa387b2d2f1498a85439","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(TaskCommandsTestCase, self).setUp()"},{"line_number":33,"context_line":"        self.task \u003d task.TaskCommands()"},{"line_number":34,"context_line":"        self.task \u003d task.TaskCommands()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @mock.patch(\"rally.cli.commands.task.open\", create\u003dTrue)"},{"line_number":37,"context_line":"    def test_load_task(self, mock_open):"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a50d1a3_eaae942e","line":34,"updated":"2015-07-30 16:51:59.000000000","message":"Duplicate line?","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e25a3fa3cb6b99c868bcaa387b2d2f1498a85439","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        self.task.abort(test_uuid)"},{"line_number":157,"context_line":"        mock_api.objects.Task.get_status._called_with(test_uuid)"},{"line_number":158,"context_line":"        self.assertEqual(2, mock_api.objects.Task.get_status.call_count)"},{"line_number":159,"context_line":"        mock_api.objects.Task.get_status.assert_called_with(test_uuid)"},{"line_number":160,"context_line":"        task.api.Task.abort.assert_called_once_with(test_uuid, False)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @mock.patch(\"rally.cli.commands.task.envutils.get_global\")"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a50d1a3_2a39dcf2","line":159,"updated":"2015-07-30 16:51:59.000000000","message":"Can\u0027t these three lines be replaced with:\n\n    mock_api.objects.Task.get_status.assert_has_calls([mock.call(test_uuid), mock.call(test_uuid)])","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"fc2fd3ffe170583ec20e1f14aee17c944e7a41ca","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        self.task.abort(test_uuid)"},{"line_number":157,"context_line":"        mock_api.objects.Task.get_status._called_with(test_uuid)"},{"line_number":158,"context_line":"        self.assertEqual(2, mock_api.objects.Task.get_status.call_count)"},{"line_number":159,"context_line":"        mock_api.objects.Task.get_status.assert_called_with(test_uuid)"},{"line_number":160,"context_line":"        task.api.Task.abort.assert_called_once_with(test_uuid, False)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    @mock.patch(\"rally.cli.commands.task.envutils.get_global\")"}],"source_content_type":"text/x-python","patch_set":41,"id":"1a4dcd0f_fe6e072e","line":159,"in_reply_to":"3a50d1a3_2a39dcf2","updated":"2015-08-05 14:42:30.000000000","message":"Done","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"}],"tests/unit/task/test_engine.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e25a3fa3cb6b99c868bcaa387b2d2f1498a85439","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"3a50d1a3_bd18d476","updated":"2015-07-30 16:51:59.000000000","message":"Scope creep: The test_run_* functions in this file seem like *excellent* candidates for deduplication with ddt. Now seems as good a time as any to do it, but it can (and perhaps should) be a separate patch.","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"fc2fd3ffe170583ec20e1f14aee17c944e7a41ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"1a4dcd0f_72b78bd8","in_reply_to":"3a50d1a3_bd18d476","updated":"2015-08-05 14:42:30.000000000","message":"Lets make it in separate patch.","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"}],"tests/unit/test_api.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"e25a3fa3cb6b99c868bcaa387b2d2f1498a85439","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        api.Task.abort(self.task_uuid)"},{"line_number":196,"context_line":"        self.assertEqual(3, mock_task_get_status.call_count)"},{"line_number":197,"context_line":"        fake_task.update_status.assert_called_once_with("},{"line_number":198,"context_line":"            consts.TaskStatus.ABORTING)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    @mock.patch(\"rally.api.objects.Task.get_status\")"},{"line_number":201,"context_line":"    @mock.patch(\"rally.api.objects.Task.get\")"}],"source_content_type":"text/x-python","patch_set":41,"id":"3a50d1a3_5d9990cf","line":198,"updated":"2015-07-30 16:51:59.000000000","message":"These three tests can be deduplicated with ddt.","commit_id":"cfc861d5c3b06a12e7b2888c71afba34cbaa3f5a"},{"author":{"_account_id":167,"name":"Christian Berendt","email":"berendt@osism.tech","username":"berendt"},"change_message_id":"613abc32392557e48749fcd98adae1a417be45ab","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            consts.TaskStatus.SOFT_ABORTING,"},{"line_number":172,"context_line":"            consts.TaskStatus.ABORTED)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        some_uuid \u003d \"uuuuuuuuiiiiiiiiiiidddd\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        api.Task.abort(some_uuid, soft\u003dsoft, async\u003dFalse)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_cee64344","line":174,"updated":"2015-09-21 12:42:13.000000000","message":"This is not a valid UUID. Why not using a valid UUID here?","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            consts.TaskStatus.SOFT_ABORTING,"},{"line_number":172,"context_line":"            consts.TaskStatus.ABORTED)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        some_uuid \u003d \"uuuuuuuuiiiiiiiiiiidddd\""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        api.Task.abort(some_uuid, soft\u003dsoft, async\u003dFalse)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_3402a970","line":174,"in_reply_to":"ba15a1d1_cee64344","updated":"2015-09-21 14:24:41.000000000","message":"Since we don\u0027t have validation of uuid, we can use any object just for testing that original object is transmitted in another function.\n\nfixed to get +1 from you:)","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":167,"name":"Christian Berendt","email":"berendt@osism.tech","username":"berendt"},"change_message_id":"613abc32392557e48749fcd98adae1a417be45ab","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    @mock.patch(\"rally.api.time\")"},{"line_number":186,"context_line":"    @mock.patch(\"rally.api.objects.Task\")"},{"line_number":187,"context_line":"    def test_abort_async(self, soft, mock_task, mock_time):"},{"line_number":188,"context_line":"        some_uuid \u003d \"uuuuuuuuiiiiiiiiiiidddd\""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        api.Task.abort(some_uuid, soft\u003dsoft, async\u003dTrue)"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_eee30732","line":188,"updated":"2015-09-21 12:42:13.000000000","message":"This is not a valid UUID. Why not using a valid UUID here?","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"14ec568ede758885b5429497d8a3f0397a210ba2","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    @mock.patch(\"rally.api.time\")"},{"line_number":186,"context_line":"    @mock.patch(\"rally.api.objects.Task\")"},{"line_number":187,"context_line":"    def test_abort_async(self, soft, mock_task, mock_time):"},{"line_number":188,"context_line":"        some_uuid \u003d \"uuuuuuuuiiiiiiiiiiidddd\""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        api.Task.abort(some_uuid, soft\u003dsoft, async\u003dTrue)"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":72,"id":"ba15a1d1_140be57e","line":188,"in_reply_to":"ba15a1d1_eee30732","updated":"2015-09-21 14:24:41.000000000","message":"Done","commit_id":"fc486e48c1b0e6345aea24d09abfc2712b9a0e64"}]}
