)]}'
{"doc/specs/in-progress/raas.rst":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"3c42820d7e6ede67358d4d8e772889e9a8bc38af","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Problem description"},{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Having a Rally daemon that gives access to Rally functionality via RPC is a"},{"line_number":24,"context_line":"highly desired feature."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_d51cdf79","line":23,"updated":"2017-02-18 08:15:27.000000000","message":"I would prefer to have just Rally Web Service and access via HTTP (REST) not RPC","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"69aada06c4c0213cbb4582fce746f2695c7ed3cf","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Problem description"},{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Having a Rally daemon that gives access to Rally functionality via RPC is a"},{"line_number":24,"context_line":"highly desired feature."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_44455b6e","line":23,"in_reply_to":"da36d5c6_d51cdf79","updated":"2017-02-21 15:58:42.000000000","message":"yeah, it is not an RPC and even not a REST:)","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"f87537e4e74d8ba4cb14e31ecf4e5fbc7f834999","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    class _Task(APIGroup):"},{"line_number":75,"context_line":"        def start(self, deployment, config, task\u003dNone,"},{"line_number":76,"context_line":"                  abort_on_sla_failure\u003dFalse):"},{"line_number":77,"context_line":"            deployment \u003d self.api.deployment._get(deployment)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            ..."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa31d9ce_67542854","line":77,"range":{"start_line":77,"start_character":45,"end_line":77,"end_character":49},"updated":"2017-02-17 18:05:22.000000000","message":"I think it is just the get function","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"2b010ea82f47a006f65b8c235e4bfcf98dfe902f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    class _Task(APIGroup):"},{"line_number":75,"context_line":"        def start(self, deployment, config, task\u003dNone,"},{"line_number":76,"context_line":"                  abort_on_sla_failure\u003dFalse):"},{"line_number":77,"context_line":"            deployment \u003d self.api.deployment._get(deployment)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            ..."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_a91f826a","line":77,"range":{"start_line":77,"start_character":45,"end_line":77,"end_character":49},"in_reply_to":"da36d5c6_263ae1cc","updated":"2017-02-23 11:03:58.000000000","message":"Splitting operation would inovolve much works, we could keep the old branch as usual. If only based the master branch, I think the splitting job would be complex:(","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"8ba0843599f0e92c3ea2635dcfa4f0eaeec7564a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    class _Task(APIGroup):"},{"line_number":75,"context_line":"        def start(self, deployment, config, task\u003dNone,"},{"line_number":76,"context_line":"                  abort_on_sla_failure\u003dFalse):"},{"line_number":77,"context_line":"            deployment \u003d self.api.deployment._get(deployment)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            ..."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_932cf64b","line":77,"range":{"start_line":77,"start_character":45,"end_line":77,"end_character":49},"in_reply_to":"da36d5c6_3f0a3222","updated":"2017-02-21 17:36:23.000000000","message":"why not use\n    def api_wrapper(path, method):\n        def decorator(func)\n            def inner(self, *args, **kwargs):\n                if self.api.endpoint_url:\n                   # remote request\n                if args:\n                   # local request\n                   fun(args, kwargs)\n?","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"c6b263531e22359f45536360e7ab9de7beb057dc","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    class _Task(APIGroup):"},{"line_number":75,"context_line":"        def start(self, deployment, config, task\u003dNone,"},{"line_number":76,"context_line":"                  abort_on_sla_failure\u003dFalse):"},{"line_number":77,"context_line":"            deployment \u003d self.api.deployment._get(deployment)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            ..."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_263ae1cc","line":77,"range":{"start_line":77,"start_character":45,"end_line":77,"end_character":49},"in_reply_to":"da36d5c6_67a8618e","updated":"2017-02-23 09:28:20.000000000","message":"I think it is unnecessary. First, gerrit manages patches with branch. Second, if we create a new branch, we need to manage it, and that will be difficult to merge the new branch to master branch, we must ensure every version could be usable.","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"b5ec4402be131125f2c802fce829b15ff5a48a72","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    class _Task(APIGroup):"},{"line_number":75,"context_line":"        def start(self, deployment, config, task\u003dNone,"},{"line_number":76,"context_line":"                  abort_on_sla_failure\u003dFalse):"},{"line_number":77,"context_line":"            deployment \u003d self.api.deployment._get(deployment)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            ..."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_67a8618e","line":77,"range":{"start_line":77,"start_character":45,"end_line":77,"end_character":49},"in_reply_to":"da36d5c6_8a2ad52a","updated":"2017-02-23 01:02:31.000000000","message":"Ok. Let us merge this patch firstly and add a another task. BTW, we have a lot of items need to do, so I hope we could create another branch to do these jobs:).","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4c8a7f37359fbe74622b27601e7c02d560073b32","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    class _Task(APIGroup):"},{"line_number":75,"context_line":"        def start(self, deployment, config, task\u003dNone,"},{"line_number":76,"context_line":"                  abort_on_sla_failure\u003dFalse):"},{"line_number":77,"context_line":"            deployment \u003d self.api.deployment._get(deployment)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            ..."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_8a2ad52a","line":77,"range":{"start_line":77,"start_character":45,"end_line":77,"end_character":49},"in_reply_to":"da36d5c6_932cf64b","updated":"2017-02-22 14:40:57.000000000","message":"Ok, the case I described was wrong. Rally daemon will have empty endpoint_url, so it will be local request there(at API side), but I have another argument now: api.task.start method requires deployment object (instead of json) to be able to call get_credential_for from https://review.openstack.org/#/c/434263/7/rally/common/objects/deploy.py","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"8ee44fcd5955346e338fb2c0b87f6546fc50df0d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    class _Task(APIGroup):"},{"line_number":75,"context_line":"        def start(self, deployment, config, task\u003dNone,"},{"line_number":76,"context_line":"                  abort_on_sla_failure\u003dFalse):"},{"line_number":77,"context_line":"            deployment \u003d self.api.deployment._get(deployment)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            ..."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_98766fd5","line":77,"range":{"start_line":77,"start_character":45,"end_line":77,"end_character":49},"in_reply_to":"da36d5c6_a91f826a","updated":"2017-02-23 22:19:22.000000000","message":"First of all, branching in OpenStack infra is not an easy task, when the branch differs from regular OpenStack branches (stable/*). To make it works, we need to modify each our jobs to transmit the right branch name to the DevStack.\n\nAlso, most of the work items do not conflict, so I hope it will not be a hard task to co-work.","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"69aada06c4c0213cbb4582fce746f2695c7ed3cf","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    class _Task(APIGroup):"},{"line_number":75,"context_line":"        def start(self, deployment, config, task\u003dNone,"},{"line_number":76,"context_line":"                  abort_on_sla_failure\u003dFalse):"},{"line_number":77,"context_line":"            deployment \u003d self.api.deployment._get(deployment)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"            ..."},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_3f0a3222","line":77,"range":{"start_line":77,"start_character":45,"end_line":77,"end_character":49},"in_reply_to":"fa31d9ce_67542854","updated":"2017-02-21 15:58:42.000000000","message":"actually, no. \n\nCalling self.api.deployment.get will enter api_wrapper decorator, so it will make additional http-call. We do not want it, since we are already at API side.","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"f87537e4e74d8ba4cb14e31ecf4e5fbc7f834999","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                    raise TypeError(\"It is restricted to use positional"},{"line_number":98,"context_line":"                        arguments for API calls.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"                if self.api.endpoint_url:"},{"line_number":101,"context_line":"                    # it\u0027s a call to the remote Rally instance"},{"line_number":102,"context_line":"                    return self._request(path, method, **kwargs)"},{"line_number":103,"context_line":"                else:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa31d9ce_b9fc883f","line":100,"range":{"start_line":100,"start_character":20,"end_line":100,"end_character":40},"updated":"2017-02-17 18:05:22.000000000","message":"I think envutils.get_endpoint_url() would be better.","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"69aada06c4c0213cbb4582fce746f2695c7ed3cf","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                    raise TypeError(\"It is restricted to use positional"},{"line_number":98,"context_line":"                        arguments for API calls.\")"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"                if self.api.endpoint_url:"},{"line_number":101,"context_line":"                    # it\u0027s a call to the remote Rally instance"},{"line_number":102,"context_line":"                    return self._request(path, method, **kwargs)"},{"line_number":103,"context_line":"                else:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_dfe3d631","line":100,"range":{"start_line":100,"start_character":20,"end_line":100,"end_character":40},"in_reply_to":"fa31d9ce_b9fc883f","updated":"2017-02-21 15:58:42.000000000","message":"rally.api.API class is used in two ways: \n\n* via CLI\n* via python-as-a-lib\n\nIn the second case, we do not want to use any of environment variables.\n\nAs for the CLI, agree, we can use envutils","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"f87537e4e74d8ba4cb14e31ecf4e5fbc7f834999","unresolved":false,"context_lines":[{"line_number":302,"context_line":"Command Line Interface"},{"line_number":303,"context_line":"----------------------"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"CLI should be extended by specific global argument ``--endpoint-url`` for"},{"line_number":306,"context_line":"using remote mote."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"Rally-as-a-Service itself should be started via new command:"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa31d9ce_d9bf7ca8","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":18},"updated":"2017-02-17 18:05:22.000000000","message":"I think storing the endpoint in a env argument is fine.","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"ff8507b53792fed0e2f6de2ed88cb82dc7b59d37","unresolved":false,"context_lines":[{"line_number":302,"context_line":"Command Line Interface"},{"line_number":303,"context_line":"----------------------"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"CLI should be extended by specific global argument ``--endpoint-url`` for"},{"line_number":306,"context_line":"using remote mote."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"Rally-as-a-Service itself should be started via new command:"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_a9d7d0bd","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":18},"in_reply_to":"da36d5c6_3241d13a","updated":"2017-02-21 15:02:45.000000000","message":"I think we don\u0027t plan split rally-client recently. But cli need to judge the remote request or not:)","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"69aada06c4c0213cbb4582fce746f2695c7ed3cf","unresolved":false,"context_lines":[{"line_number":302,"context_line":"Command Line Interface"},{"line_number":303,"context_line":"----------------------"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"CLI should be extended by specific global argument ``--endpoint-url`` for"},{"line_number":306,"context_line":"using remote mote."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"Rally-as-a-Service itself should be started via new command:"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_bf02a107","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":18},"in_reply_to":"da36d5c6_3241d13a","updated":"2017-02-21 15:58:42.000000000","message":"no. Some years ago, we registered a separate repo for client side (https://github.com/stackforge/python-rallyclient), but then we decided that it complicates the architecture. \n\nHaving separate rallyclient, in case of direct local use of Rally, sounds totally not user-friendly. If I want to call rally code directly (without HTTP stuff), I want to download just one package and use it.\n\nIn case of HTTP-based usage, rallyclient has a sense for existence, but it will be a duplication of effort (having CLI at rally package and in separate python package).\n\nIn general, it doesn\u0027t matter how Rally will be used (via HTTP or direct use), from user side it should look the same (same arguments, same output, same exceptions, etc).\n\nTo fix an issue that user will need to install requirements for all rally plugins, which sounds redundant in case of HTTP-calls, I think it will be better to move all OpenStack related plugins out of tree of main rally repo. So it will be two repos - rally and rally-opentack. The first repo will include rally framework itself with all help classes and utils. The second one will include openstack related scenarios. In this case, rally itself will have a small number of requirements and the package itself will be light-weight","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"8ba0843599f0e92c3ea2635dcfa4f0eaeec7564a","unresolved":false,"context_lines":[{"line_number":302,"context_line":"Command Line Interface"},{"line_number":303,"context_line":"----------------------"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"CLI should be extended by specific global argument ``--endpoint-url`` for"},{"line_number":306,"context_line":"using remote mote."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"Rally-as-a-Service itself should be started via new command:"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_d39f4e01","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":18},"in_reply_to":"da36d5c6_bf02a107","updated":"2017-02-21 17:36:23.000000000","message":"According to your meaning, rally framework just own api\u0027s power and depends on rally-openstack. is it right?","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"85336d8bbe28788a7fabc8c3fd27e69e7073d961","unresolved":false,"context_lines":[{"line_number":302,"context_line":"Command Line Interface"},{"line_number":303,"context_line":"----------------------"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"CLI should be extended by specific global argument ``--endpoint-url`` for"},{"line_number":306,"context_line":"using remote mote."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"Rally-as-a-Service itself should be started via new command:"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_33797cf7","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":18},"in_reply_to":"da36d5c6_bf02a107","updated":"2017-02-22 02:20:32.000000000","message":"So maybe rally could be used to other projects in future, it is a benchmarking tool, not only for openstack ? LOL","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"4c8a7f37359fbe74622b27601e7c02d560073b32","unresolved":false,"context_lines":[{"line_number":302,"context_line":"Command Line Interface"},{"line_number":303,"context_line":"----------------------"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"CLI should be extended by specific global argument ``--endpoint-url`` for"},{"line_number":306,"context_line":"using remote mote."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"Rally-as-a-Service itself should be started via new command:"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_8f7107e3","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":18},"in_reply_to":"da36d5c6_d39f4e01","updated":"2017-02-22 14:40:57.000000000","message":"no, rally framework will not depend on rally-openstack at all. rally-openstack package will \"rally\" in dependency.\n\nIt should be done, as Chen mentioned, to support not only OpenStack. I mean if I want to test jut Kubernetes (for example), I do not want to install all OpenStack clients and etc.","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"69aada06c4c0213cbb4582fce746f2695c7ed3cf","unresolved":false,"context_lines":[{"line_number":302,"context_line":"Command Line Interface"},{"line_number":303,"context_line":"----------------------"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"CLI should be extended by specific global argument ``--endpoint-url`` for"},{"line_number":306,"context_line":"using remote mote."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"Rally-as-a-Service itself should be started via new command:"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_9ff5decc","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":18},"in_reply_to":"fa31d9ce_d9bf7ca8","updated":"2017-02-21 15:58:42.000000000","message":"The env variable is just a way for simplification typing, but it should not replace an ability to specify things via regular CLI arguments.","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"6263d62e6e27710e4676d4e42791e7f09fa82a80","unresolved":false,"context_lines":[{"line_number":302,"context_line":"Command Line Interface"},{"line_number":303,"context_line":"----------------------"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"CLI should be extended by specific global argument ``--endpoint-url`` for"},{"line_number":306,"context_line":"using remote mote."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"Rally-as-a-Service itself should be started via new command:"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_3241d13a","line":306,"range":{"start_line":305,"start_character":0,"end_line":306,"end_character":18},"in_reply_to":"fa31d9ce_d9bf7ca8","updated":"2017-02-20 03:07:45.000000000","message":"we would split rally-client ?","commit_id":"2b1ce99547429bb78d82e8d8eff0247129f6c6ac"}]}
