)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"abb2069bd355616410a6370a4e297b93192fd794","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[Sahara] Add Hadoop metris collection"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Sahara Job benchmarks can now collect information from Hadoop\u0027s"},{"line_number":10,"context_line":"Historyserver."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I9e3900f65beef0fcba9538fca2bd650bfad16345"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9a41bdd9_e15a0bf2","line":10,"updated":"2015-07-18 12:02:42.000000000","message":"Please write more detail commit message. What function was added, for what, what they do.","commit_id":"9cecf369e4c1f38d50a401c15dbddf0d4beb16e5"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"da0e1187dc8def02a68f9ad81c94979c5ebdb08c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Nikita Konovalov \u003cnkonovalov@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-08-11 15:11:48 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[Sahara] Add Hadoop metris collection"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Sahara Job benchmarks can now collect information from Hadoop\u0027s"},{"line_number":10,"context_line":"Historyserver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1a4dcd0f_f02306a9","line":7,"updated":"2015-08-13 18:13:42.000000000","message":"metris/metrics","commit_id":"8b3d7d596818d4eee2a2561cb94fe4080c85e571"}],"rally/plugins/openstack/scenarios/sahara/hadoop_helpers.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"abb2069bd355616410a6370a4e297b93192fd794","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            if process_name \u003d\u003d process:"},{"line_number":26,"context_line":"                return node_group[\"instances\"][0][\"management_ip\"]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    raise exceptions.SaharaClusterFailure(\"Could not find %s instance\""},{"line_number":29,"context_line":"                                          % process_name)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_6167dbb7","line":28,"updated":"2015-07-18 12:02:42.000000000","message":"Add please i18n","commit_id":"9cecf369e4c1f38d50a401c15dbddf0d4beb16e5"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"abb2069bd355616410a6370a4e297b93192fd794","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                                          % process_name)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def get_oozie_url(cluster):"},{"line_number":33,"context_line":"    oozie_name \u003d consts.OOZIE_NAME[cluster.plugin_name]"},{"line_number":34,"context_line":"    ip \u003d _find_management_ip_for_process(cluster, oozie_name)"},{"line_number":35,"context_line":"    return \"http://%s:11000/oozie\" % ip"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a41bdd9_2108f3d8","line":32,"updated":"2015-07-18 12:02:42.000000000","message":"Please document all functions in your code. Description, params, errors, reruns.","commit_id":"9cecf369e4c1f38d50a401c15dbddf0d4beb16e5"}],"rally/plugins/openstack/scenarios/sahara/jobs.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                        in a sequence"},{"line_number":44,"context_line":"        :param hadoop_metrics: List of strings \u003cmetrics_group\u003e:\u003cmetrics_value\u003e"},{"line_number":45,"context_line":"                               to be collected after the Job Execution"},{"line_number":46,"context_line":"                               completes"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        mains \u003d self.context[\"tenant\"][\"sahara_mains\"]"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_1ace1963","line":46,"updated":"2015-08-31 13:55:02.000000000","message":"s/completes/completed/","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        :param jobs: list of jobs that should be executed in one context"},{"line_number":87,"context_line":"        :param hadoop_metrics: List of strings \u003cmetrics_group\u003e:\u003cmetrics_value\u003e"},{"line_number":88,"context_line":"                               to be collected after the Job Execution"},{"line_number":89,"context_line":"                               completes"},{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        for idx, job in enumerate(jobs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_9ae0e9ce","line":89,"updated":"2015-08-31 13:55:02.000000000","message":"s/completes/completed/","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        :param deltas: list of integers which will be used to add or"},{"line_number":111,"context_line":"                       remove worker nodes from the cluster"},{"line_number":112,"context_line":"        :param hadoop_metrics: List of strings \u003cmetrics_group\u003e:\u003cmetrics_value\u003e"},{"line_number":113,"context_line":"               to be collected after the Job Execution"},{"line_number":114,"context_line":"               completes"},{"line_number":115,"context_line":"        \"\"\""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_bae36dd8","line":113,"updated":"2015-08-31 13:55:02.000000000","message":"s/completes/completed/","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"}],"rally/plugins/openstack/scenarios/sahara/utils.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"858753416facde6e76fec443fee0c59ce2829474","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        raise exceptions.SaharaClusterFailure(_(\"Could not find %s instance\")"},{"line_number":561,"context_line":"                                              % process_name)"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    @staticmethod"},{"line_number":564,"context_line":"    def get_oozie_url(cluster):"},{"line_number":565,"context_line":"        \"\"\"Get Oozie URL for the cluster"},{"line_number":566,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_cd49e232","line":563,"updated":"2015-08-12 13:15:39.000000000","message":"It is better to use @classmethod here and s/SaharaScenario/cls/ at L574\n\nSame for methods below","commit_id":"8b3d7d596818d4eee2a2561cb94fe4080c85e571"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"858753416facde6e76fec443fee0c59ce2829474","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        Finds the Instance running the Oozie service and returns the URL."},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        :param cluster: The Cluster object."},{"line_number":570,"context_line":"        :return: The Oozie URL."},{"line_number":571,"context_line":"        \"\"\""},{"line_number":572,"context_line":""},{"line_number":573,"context_line":"        oozie_name \u003d sahara_consts.OOZIE_NAME[cluster.plugin_name]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_0d282a32","line":570,"updated":"2015-08-12 13:15:39.000000000","message":":returns:","commit_id":"8b3d7d596818d4eee2a2561cb94fe4080c85e571"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"858753416facde6e76fec443fee0c59ce2829474","unresolved":false,"context_lines":[{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        return \"http://%s:11000/oozie\" % ip"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    @staticmethod"},{"line_number":580,"context_line":"    def get_history_server_url(cluster):"},{"line_number":581,"context_line":"        \"\"\"Get History Server URL for the cluster"},{"line_number":582,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_ed54dec6","line":579,"updated":"2015-08-12 13:15:39.000000000","message":"Same here","commit_id":"8b3d7d596818d4eee2a2561cb94fe4080c85e571"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"858753416facde6e76fec443fee0c59ce2829474","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        URL."},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        :param cluster: The Cluster object."},{"line_number":587,"context_line":"        :return: The History Server URL."},{"line_number":588,"context_line":"        \"\"\""},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        history_server_name \u003d ("}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_cd1ec20b","line":587,"updated":"2015-08-12 13:15:39.000000000","message":":returns:","commit_id":"8b3d7d596818d4eee2a2561cb94fe4080c85e571"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"858753416facde6e76fec443fee0c59ce2829474","unresolved":false,"context_lines":[{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        :param cluster: The Cluster object."},{"line_number":606,"context_line":"        :param job_execution: The Job Execution object."},{"line_number":607,"context_line":"        :return: The internal job id as a string"},{"line_number":608,"context_line":"        \"\"\""},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        oozie_url \u003d SaharaScenario.get_oozie_url(cluster)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_4d1872d3","line":607,"updated":"2015-08-12 13:15:39.000000000","message":":returns:","commit_id":"8b3d7d596818d4eee2a2561cb94fe4080c85e571"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"858753416facde6e76fec443fee0c59ce2829474","unresolved":false,"context_lines":[{"line_number":632,"context_line":""},{"line_number":633,"context_line":"        :param cluster: The Cluster object."},{"line_number":634,"context_line":"        :param hadoop_job_id: The internal Hadoop Job id."},{"line_number":635,"context_line":"        :return: A dictionary mapping the metrics name to its total value."},{"line_number":636,"context_line":"        \"\"\""},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        history_server_url \u003d SaharaScenario.get_history_server_url(cluster)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_2d32c610","line":635,"updated":"2015-08-12 13:15:39.000000000","message":":returns:","commit_id":"8b3d7d596818d4eee2a2561cb94fe4080c85e571"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"c871c6cc4363015319faeb120df6327907c0b3ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1a4dcd0f_ab9df067","updated":"2015-08-14 10:25:56.000000000","message":"Look at my comments at patch set 3","commit_id":"1eedc9bb5278cb72107cda45415d9b097df37a53"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        :param job_idx: The index of a job in a sequence"},{"line_number":485,"context_line":"        :param hadoop_metrics: List of strings \u003cmetrics_group\u003e:\u003cmetrics_value\u003e"},{"line_number":486,"context_line":"                               to be collected after the Job Execution"},{"line_number":487,"context_line":"                               completes"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        \"\"\""},{"line_number":490,"context_line":"        @atomic.action_timer(\"sahara.job_execution_%s\" % job_idx)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_1a061952","line":487,"updated":"2015-08-31 13:55:02.000000000","message":"s/completes/completed/","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":7132,"name":"Nikita Konovalov","email":"nkonovalov@mirantis.com","username":"nkonovalov"},"change_message_id":"271948fe9e7d880422671ca43b28202a65ff44dd","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        :param job_idx: The index of a job in a sequence"},{"line_number":485,"context_line":"        :param hadoop_metrics: List of strings \u003cmetrics_group\u003e:\u003cmetrics_value\u003e"},{"line_number":486,"context_line":"                               to be collected after the Job Execution"},{"line_number":487,"context_line":"                               completes"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        \"\"\""},{"line_number":490,"context_line":"        @atomic.action_timer(\"sahara.job_execution_%s\" % job_idx)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_553cbbbe","line":487,"in_reply_to":"da20952f_1a061952","updated":"2015-09-10 14:53:34.000000000","message":"Ok. If you are so obsessed with english grammar in the doc-strings then I\u0027d recommend you to look for the thing called \"Zero conditionals\". This type of conditionals which allows to use the present simple tense in both the main and the complimentary clauses. It is exactly the thing that I use here. You can find more examples here http://www.grammar-quizzes.com/8-5.html","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5a3c4c5b62d83a16c167b5727c606a6b061090c3","unresolved":false,"context_lines":[{"line_number":484,"context_line":"        :param job_idx: The index of a job in a sequence"},{"line_number":485,"context_line":"        :param hadoop_metrics: List of strings \u003cmetrics_group\u003e:\u003cmetrics_value\u003e"},{"line_number":486,"context_line":"                               to be collected after the Job Execution"},{"line_number":487,"context_line":"                               completes"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        \"\"\""},{"line_number":490,"context_line":"        @atomic.action_timer(\"sahara.job_execution_%s\" % job_idx)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_b1f0c667","line":487,"in_reply_to":"da20952f_553cbbbe","updated":"2015-09-10 15:18:58.000000000","message":"Okay, got it","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        :param cluster: The cluster object."},{"line_number":582,"context_line":"        :param process_name: The string with the process name."},{"line_number":583,"context_line":"        :return: Management IP as a string."},{"line_number":584,"context_line":"        :raises: SaharaClusterFailure if there is no such process running in"},{"line_number":585,"context_line":"        the cluster."},{"line_number":586,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_e502a6b3","line":583,"updated":"2015-08-31 13:55:02.000000000","message":"s/:return:/:returns:/  ref. pep257","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"7f3df26c0817a4b51194d7cf50d82eff81a5ffc5","unresolved":false,"context_lines":[{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        :param cluster: The cluster object."},{"line_number":582,"context_line":"        :param process_name: The string with the process name."},{"line_number":583,"context_line":"        :return: Management IP as a string."},{"line_number":584,"context_line":"        :raises: SaharaClusterFailure if there is no such process running in"},{"line_number":585,"context_line":"        the cluster."},{"line_number":586,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_11cad24f","line":583,"in_reply_to":"da20952f_d091b947","updated":"2015-09-10 15:17:32.000000000","message":"This is from sphinx documentation format, not from pep257, my fault.\n\nBut :returns: is used in rally in most cases:\n\n $ grep -r \u0027:return:\u0027 rally | wc -l\n 6\n $ grep -r \u0027:returns:\u0027 rally | wc -l\n 176\n\nhttps://pythonhosted.org/an_example_pypi_project/sphinx.html","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":7132,"name":"Nikita Konovalov","email":"nkonovalov@mirantis.com","username":"nkonovalov"},"change_message_id":"271948fe9e7d880422671ca43b28202a65ff44dd","unresolved":false,"context_lines":[{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        :param cluster: The cluster object."},{"line_number":582,"context_line":"        :param process_name: The string with the process name."},{"line_number":583,"context_line":"        :return: Management IP as a string."},{"line_number":584,"context_line":"        :raises: SaharaClusterFailure if there is no such process running in"},{"line_number":585,"context_line":"        the cluster."},{"line_number":586,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_d091b947","line":583,"in_reply_to":"da20952f_e502a6b3","updated":"2015-09-10 14:53:34.000000000","message":"Ok, Let\u0027s see. The doc you are referencing is here https://www.python.org/dev/peps/pep-0257/\nIt describes the way the doctoring should look like. This doc has nothing to do with parameters documentation or return statements.\n\nBut let\u0027s go further than that. The only reason to keep these :param and :return lines is that they are used to build an publish docs. And OpenStack projects use Sphinx for it. And their guide here http://sphinx-doc.org/domains.html#info-field-lists says that both \"return\" and \"returns\" are fine. And they use \"return\" in the example.\n\nMy last point here is that in fact tox.ini file does not tell the checker to ignore the pep257 check. The pep8 test passes which means the checker is pretty happy with this doc-string.\n\nSo why should it be your way?","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        Finds the Instance running the Oozie service and returns the URL."},{"line_number":601,"context_line":""},{"line_number":602,"context_line":"        :param cluster: The Cluster object."},{"line_number":603,"context_line":"        :return: The Oozie URL."},{"line_number":604,"context_line":"        \"\"\""},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        oozie_name \u003d sahara_consts.OOZIE_NAME[cluster.plugin_name]"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_6525365a","line":603,"updated":"2015-08-31 13:55:02.000000000","message":"s/:return:/:returns:/  ref. pep257","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ca823f7c03d1db42934e4b66d3f81741ad082a18","unresolved":false,"context_lines":[{"line_number":600,"context_line":"        Finds the Instance running the Oozie service and returns the URL."},{"line_number":601,"context_line":""},{"line_number":602,"context_line":"        :param cluster: The Cluster object."},{"line_number":603,"context_line":"        :return: The Oozie URL."},{"line_number":604,"context_line":"        \"\"\""},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        oozie_name \u003d sahara_consts.OOZIE_NAME[cluster.plugin_name]"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_f1a4fe4b","line":603,"in_reply_to":"da20952f_6525365a","updated":"2015-09-10 15:20:11.000000000","message":"Sorry, not pep257 but https://pythonhosted.org/an_example_pypi_project/sphinx.html","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        \"\"\""},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        oozie_name \u003d sahara_consts.OOZIE_NAME[cluster.plugin_name]"},{"line_number":607,"context_line":"        ip \u003d SaharaScenario._find_management_ip_for_process(cluster,"},{"line_number":608,"context_line":"                                                            oozie_name)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        return \"http://%s:11000/oozie\" % ip"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_e59e2662","line":607,"updated":"2015-08-31 13:55:02.000000000","message":"s/SaharaScenario/cls/  # use @classmethod","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"241833e77d50f9825b76ac803f27f683502e38f5","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        \"\"\""},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        oozie_name \u003d sahara_consts.OOZIE_NAME[cluster.plugin_name]"},{"line_number":607,"context_line":"        ip \u003d SaharaScenario._find_management_ip_for_process(cluster,"},{"line_number":608,"context_line":"                                                            oozie_name)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        return \"http://%s:11000/oozie\" % ip"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_94e81018","line":607,"in_reply_to":"da20952f_b50437c6","updated":"2015-09-10 15:28:46.000000000","message":"1) class modification is something required in rare cases\n\n2) advantage of classmethods is widely described for cases when code uses its class, for example:\n\n https://julien.danjou.info/blog/2013/guide-python-static-class-abstract-methods\n http://lifecs.likai.org/2014/03/really-understanding-python.html\n\nI will not argue about that because this is not really critical for this code, just remove -1","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":7132,"name":"Nikita Konovalov","email":"nkonovalov@mirantis.com","username":"nkonovalov"},"change_message_id":"271948fe9e7d880422671ca43b28202a65ff44dd","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        \"\"\""},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        oozie_name \u003d sahara_consts.OOZIE_NAME[cluster.plugin_name]"},{"line_number":607,"context_line":"        ip \u003d SaharaScenario._find_management_ip_for_process(cluster,"},{"line_number":608,"context_line":"                                                            oozie_name)"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"        return \"http://%s:11000/oozie\" % ip"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_b50437c6","line":607,"in_reply_to":"da20952f_e59e2662","updated":"2015-09-10 14:53:34.000000000","message":"Now class vs static. If you look carefully through the code of theses methods you will find that they never modify the class instance state. These methods operate only on their own arguments which means that the cls reference is not needed. \n\nThis brings up the question \"Why these methods are in this class?\" The answer is simple. They were not in this class in my original patch set. Reviewers asked me to move them here. Reviewers wanted keep utils in one place. And that\u0027s a fine argument for me. That\u0027s why these methods are here. And again they are static by their nature and @staticmethod decorator is exactly the thing that should be used in cases like this, \n\nSo why should be the way you suggest?","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":622,"context_line":""},{"line_number":623,"context_line":"        history_server_name \u003d ("},{"line_number":624,"context_line":"            sahara_consts.HISTORY_SERVER_NAME[cluster.plugin_name])"},{"line_number":625,"context_line":"        ip \u003d SaharaScenario._find_management_ip_for_process("},{"line_number":626,"context_line":"            cluster,"},{"line_number":627,"context_line":"            history_server_name)"},{"line_number":628,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_c58e822d","line":625,"updated":"2015-08-31 13:55:02.000000000","message":"s/SaharaScenario/cls/  # use @classmethod","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        :return: The internal job id as a string"},{"line_number":641,"context_line":"        \"\"\""},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"        oozie_url \u003d SaharaScenario.get_oozie_url(cluster)"},{"line_number":644,"context_line":"        oozie_wf_id \u003d job_execution.oozie_job_id"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        resp \u003d requests.get(\"%s/v1/job/%s\" % (oozie_url, oozie_wf_id),"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_85840a0b","line":643,"updated":"2015-08-31 13:55:02.000000000","message":"s/SaharaScenario/cls/  # use @classmethod","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"59dcd516b7b72ac1861ef177743827c138a9d3aa","unresolved":false,"context_lines":[{"line_number":668,"context_line":"        :return: A dictionary mapping the metrics name to its total value."},{"line_number":669,"context_line":"        \"\"\""},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        history_server_url \u003d SaharaScenario.get_history_server_url(cluster)"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        resp \u003d requests.get(\"%s/ws/v1/history/mapreduce/jobs/%s/counters\" %"},{"line_number":674,"context_line":"                            (history_server_url, hadoop_job_id),"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_457b5228","line":671,"updated":"2015-08-31 13:55:02.000000000","message":"s/SaharaScenario/cls/  # use @classmethod","commit_id":"88f5a0420076a2acbff0afc2b8f827c79ddcee69"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"11ee50d683f3b0ed48514bade6c7c67f159de728","unresolved":false,"context_lines":[{"line_number":524,"context_line":"            # TODO(pboldin): provide stackable ActionTimers"},{"line_number":525,"context_line":"            if action_name not in self._atomic_actions:"},{"line_number":526,"context_line":"                self._atomic_actions[action_name] \u003d value"},{"line_number":527,"context_line":"            else:"},{"line_number":528,"context_line":"                self._atomic_actions[action_name] +\u003d value"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def _job_execution_is_finished(self, je_id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba15a1d1_02b98bec","line":527,"updated":"2015-09-19 04:26:20.000000000","message":"This path is extra and should be removed.","commit_id":"519a031a457576a1da8d6c69024b66a4b50c7746"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9c852dd577340af3a7b252710ca6ed4176547a6e","unresolved":false,"context_lines":[{"line_number":511,"context_line":"                    cluster_id, job_execution, hadoop_metrics)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def _propogate_hadoop_metrics(self, cluster_id, job_execution,"},{"line_number":514,"context_line":"                                  hadoop_metrics):"},{"line_number":515,"context_line":"        cluster \u003d self.clients(\"sahara\").clusters.get(cluster_id)"},{"line_number":516,"context_line":"        job_metrics \u003d self.get_hadoop_metrics_for_job("},{"line_number":517,"context_line":"            cluster, self.get_job_internal_id(cluster, job_execution)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_56fbd778","line":514,"updated":"2015-10-11 06:43:09.000000000","message":"This needs a docstring. Modifying atomic_actions is not usually done by scenarios. Please provide a docstring for this method","commit_id":"f7af34b1561549aeea794372b6befbe71fc327b2"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9c852dd577340af3a7b252710ca6ed4176547a6e","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        )"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        for requested_metric in hadoop_metrics:"},{"line_number":521,"context_line":"            group, name \u003d requested_metric.split(\":\")"},{"line_number":522,"context_line":"            value \u003d job_metrics[group][name]"},{"line_number":523,"context_line":"            action_name \u003d atomic.ActionTimer._get_atomic_action_name("},{"line_number":524,"context_line":"                self, requested_metric)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_1648ffca","line":521,"updated":"2015-10-11 06:43:09.000000000","message":"won\u0027t there be some extra \" \"? If so, maybe you should consider using strip() to remove those.","commit_id":"f7af34b1561549aeea794372b6befbe71fc327b2"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"9c852dd577340af3a7b252710ca6ed4176547a6e","unresolved":false,"context_lines":[{"line_number":523,"context_line":"            action_name \u003d atomic.ActionTimer._get_atomic_action_name("},{"line_number":524,"context_line":"                self, requested_metric)"},{"line_number":525,"context_line":"            # TODO(pboldin): provide stackable ActionTimers"},{"line_number":526,"context_line":"            if action_name not in self._atomic_actions:"},{"line_number":527,"context_line":"                self._atomic_actions[action_name] \u003d value"},{"line_number":528,"context_line":"            else:"},{"line_number":529,"context_line":"                self._atomic_actions[action_name] +\u003d value"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a2fa921_d614c7a0","line":526,"updated":"2015-10-11 06:43:09.000000000","message":"nit: this can be handled by dict.setdefault()","commit_id":"f7af34b1561549aeea794372b6befbe71fc327b2"}]}
