)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b9baf62ac884e2339463ad21ff1eeac1a2ead2c4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Switch scenarios plugins to plugin base"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch finishes work on switching all plugin types"},{"line_number":10,"context_line":"to the single code base. This reduce amount of code and unifes"},{"line_number":11,"context_line":"all plugins which makes it simple to work on any kind of common"},{"line_number":12,"context_line":"plugin functionallity: Deprecation, Info, Validation and so on.."},{"line_number":13,"context_line":"In this patch:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa1b9901_fa595036","line":10,"updated":"2015-08-24 19:59:26.000000000","message":"s/unifes/unifies","commit_id":"49399cfb51bb213c822147ba477187588c05e13c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a50681ba7695cb60466a2de47ac123ec7bdaf939","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Switch scenarios plugins to plugin base"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch finishes work on switching all plugin types"},{"line_number":10,"context_line":"to the single code base. This reduce amount of code and unifes"},{"line_number":11,"context_line":"all plugins which makes it simple to work on any kind of common"},{"line_number":12,"context_line":"plugin functionallity: Deprecation, Info, Validation and so on.."},{"line_number":13,"context_line":"In this patch:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa1b9901_5abe3c00","line":10,"in_reply_to":"fa1b9901_fa595036","updated":"2015-08-24 20:21:17.000000000","message":"reduces","commit_id":"49399cfb51bb213c822147ba477187588c05e13c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a50681ba7695cb60466a2de47ac123ec7bdaf939","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch finishes work on switching all plugin types"},{"line_number":10,"context_line":"to the single code base. This reduce amount of code and unifes"},{"line_number":11,"context_line":"all plugins which makes it simple to work on any kind of common"},{"line_number":12,"context_line":"plugin functionallity: Deprecation, Info, Validation and so on.."},{"line_number":13,"context_line":"In this patch:"},{"line_number":14,"context_line":"* Scenario.meta was removed and now MetaMixin is used"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa1b9901_3a3a6899","line":11,"updated":"2015-08-24 20:21:17.000000000","message":"making it simpler","commit_id":"49399cfb51bb213c822147ba477187588c05e13c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b9baf62ac884e2339463ad21ff1eeac1a2ead2c4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch finishes work on switching all plugin types"},{"line_number":10,"context_line":"to the single code base. This reduce amount of code and unifes"},{"line_number":11,"context_line":"all plugins which makes it simple to work on any kind of common"},{"line_number":12,"context_line":"plugin functionallity: Deprecation, Info, Validation and so on.."},{"line_number":13,"context_line":"In this patch:"},{"line_number":14,"context_line":"* Scenario.meta was removed and now MetaMixin is used"},{"line_number":15,"context_line":"* ScenarioGroups are removed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa1b9901_9a6854bc","line":12,"updated":"2015-08-24 19:59:26.000000000","message":"s/functionallity/functionality","commit_id":"49399cfb51bb213c822147ba477187588c05e13c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a50681ba7695cb60466a2de47ac123ec7bdaf939","unresolved":false,"context_lines":[{"line_number":13,"context_line":"In this patch:"},{"line_number":14,"context_line":"* Scenario.meta was removed and now MetaMixin is used"},{"line_number":15,"context_line":"* ScenarioGroups are removed"},{"line_number":16,"context_line":"  This reduce framework complexity. One thing less that you"},{"line_number":17,"context_line":"  should know and understand to start."},{"line_number":18,"context_line":"* Scenario plugins can be explit set through configure()"},{"line_number":19,"context_line":"  ** Unified with other kind of plugins"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa1b9901_da400c0a","line":16,"updated":"2015-08-24 20:21:17.000000000","message":"reduces","commit_id":"49399cfb51bb213c822147ba477187588c05e13c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a50681ba7695cb60466a2de47ac123ec7bdaf939","unresolved":false,"context_lines":[{"line_number":15,"context_line":"* ScenarioGroups are removed"},{"line_number":16,"context_line":"  This reduce framework complexity. One thing less that you"},{"line_number":17,"context_line":"  should know and understand to start."},{"line_number":18,"context_line":"* Scenario plugins can be explit set through configure()"},{"line_number":19,"context_line":"  ** Unified with other kind of plugins"},{"line_number":20,"context_line":"  ** Flexibility it is simpler to move and rename plugins"},{"line_number":21,"context_line":"     with deprecation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa1b9901_1a5e84e9","line":18,"updated":"2015-08-24 20:21:17.000000000","message":"explicitly","commit_id":"49399cfb51bb213c822147ba477187588c05e13c"},{"author":{"_account_id":13609,"name":"Pavel Boldin","email":"pboldin@mirantis.com","username":"pboldin"},"change_message_id":"a50681ba7695cb60466a2de47ac123ec7bdaf939","unresolved":false,"context_lines":[{"line_number":24,"context_line":"* Improve rally.info substitution"},{"line_number":25,"context_line":"it\u0027s okay if we specify each part of name of the plguin"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Future steps (not in this patch) are:"},{"line_number":28,"context_line":"* Refactor plugin info and reduce copy paste inside that module"},{"line_number":29,"context_line":"* Refactor atomic action (make the work for context too)"},{"line_number":30,"context_line":"* Refactor validation (make scenario validation generic enough"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"fa1b9901_ba6d189b","line":27,"updated":"2015-08-24 20:21:17.000000000","message":"Don\u0027t mention them then.\n\nWrite a short blueprint and reference it instead.","commit_id":"49399cfb51bb213c822147ba477187588c05e13c"}],"rally/exceptions.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"54965b1f8c9d23ed0ad3be3d2f11223025214c50","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"class PluginNotFound(NotFoundException):"},{"line_number":120,"context_line":"    msg_fmt \u003d _(\"There is no plugin with name: `%(name)s` in \""},{"line_number":121,"context_line":"                \"`%(namespace)s` namespace.\")"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class PluginWithSuchNameExists(RallyException):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_a51697ef","side":"PARENT","line":121,"updated":"2015-08-22 11:42:06.000000000","message":"I dislike this change. Also, imo, \u0027:\u0027 char is redundant here.","commit_id":"60bdc867d253c9399e3844f3015952f8f4d019f0"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"54965b1f8c9d23ed0ad3be3d2f11223025214c50","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class PluginWithSuchNameExists(RallyException):"},{"line_number":125,"context_line":"    msg_fmt \u003d _(\"Plugin with such name: `%(name)s` already exists in \""},{"line_number":126,"context_line":"                \"`%(namespace)s` namespace\")"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_45d21b36","side":"PARENT","line":125,"updated":"2015-08-22 11:42:06.000000000","message":"same here","commit_id":"60bdc867d253c9399e3844f3015952f8f4d019f0"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"b84aca1ca72b7c81647d986f976283f0e2f89266","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                \"%(namespace)s namespace\")"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class NoSuchScenario(NotFoundException):"},{"line_number":130,"context_line":"    msg_fmt \u003d _(\"There is no benchmark scenario with name `%(name)s`.\")"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_538609dc","line":129,"updated":"2015-08-25 12:20:00.000000000","message":"This exception is not in use anymore, I suggest deleting it","commit_id":"7669c332fab347f9b14ed00c353b7d55136884e9"}],"rally/plugins/openstack/scenario.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"54965b1f8c9d23ed0ad3be3d2f11223025214c50","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from rally import osclients"},{"line_number":17,"context_line":"from rally.task import scenario"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# NOTE(boris-42): Shortcut to remove import of both rally.task.scenario and"},{"line_number":20,"context_line":"#                 rally.plugins.openstack.scenario"},{"line_number":21,"context_line":"configure \u003d scenario.configure"},{"line_number":22,"context_line":"configure_cls \u003d scenario.configure_cls"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_25e127ff","line":19,"updated":"2015-08-22 11:42:06.000000000","message":"Nit: s/Shortcut/Shortcuts","commit_id":"c4e9687aa26841bf24234b6ec011dfe2f11a6496"}],"rally/task/engine.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"e463ccef2ac916719595f3bedd818115be3ec918","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    @rutils.log_task_wrapper(LOG.info,"},{"line_number":181,"context_line":"                             _(\"Task validation of scenarios names.\"))"},{"line_number":182,"context_line":"    def _validate_config_scenarios_name(self, config):"},{"line_number":183,"context_line":"        available \u003d set(s.get_name() for s in scenario.Scenario.get_all())"},{"line_number":184,"context_line":"        specified \u003d set(six.iterkeys(config))"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        if not specified.issubset(available):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_844b672b","line":183,"updated":"2015-08-17 13:36:37.000000000","message":"http://paste.openstack.org/show/419157/","commit_id":"b11c9a0917ce2af18ce81a605ac294569f1777e1"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"da8b0e3d10d7bd089555b461cf4f3a50e8504a46","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    @rutils.log_task_wrapper(LOG.info,"},{"line_number":181,"context_line":"                             _(\"Task validation of scenarios names.\"))"},{"line_number":182,"context_line":"    def _validate_config_scenarios_name(self, config):"},{"line_number":183,"context_line":"        available \u003d set(s.get_name() for s in scenario.Scenario.get_all())"},{"line_number":184,"context_line":"        specified \u003d set(six.iterkeys(config))"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        if not specified.issubset(available):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_af48b85c","line":183,"in_reply_to":"fa1b9901_844b672b","updated":"2015-08-17 18:50:34.000000000","message":"So now it will show: \n\nFuncPlugin.NovaServers.boot_and_delete_server","commit_id":"b11c9a0917ce2af18ce81a605ac294569f1777e1"}],"rally/task/scenario.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"e463ccef2ac916719595f3bedd818115be3ec918","unresolved":false,"context_lines":[{"line_number":36,"context_line":"       is_scenario \u003d True # that is used during discovering"},{"line_number":37,"context_line":"       func.context \u003d context # default context for benchmark"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"       :param context: Default benchmark context"},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    def wrapper(func):"},{"line_number":42,"context_line":"        plugin.from_func(Scenario)(func)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_8922a5b8","line":39,"updated":"2015-08-17 13:36:37.000000000","message":":param name:\n:param namespace:","commit_id":"b11c9a0917ce2af18ce81a605ac294569f1777e1"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"1d5c1e66312e43dcd65a77ec2feb3b2a6b10f56f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"       is_scenario \u003d True # that is used during discovering"},{"line_number":37,"context_line":"       func.context \u003d context # default context for benchmark"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"       :param context: Default benchmark context"},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    def wrapper(func):"},{"line_number":42,"context_line":"        plugin.from_func(Scenario)(func)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_6f6380b2","line":39,"in_reply_to":"fa1b9901_8922a5b8","updated":"2015-08-18 06:35:54.000000000","message":"Done","commit_id":"b11c9a0917ce2af18ce81a605ac294569f1777e1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"54965b1f8c9d23ed0ad3be3d2f11223025214c50","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    return wrapper"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def configure_cls(cls):"},{"line_number":54,"context_line":"    # NOTE(boris-42): After @scenario.configure() is performed to cls.method,"},{"line_number":55,"context_line":"    #                 method.im_class is pointing to FuncPlugin class instead"},{"line_number":56,"context_line":"    #                 of original cls. There is no way to fix this, mostly"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_c8c3a289","line":53,"updated":"2015-08-22 11:42:06.000000000","message":"Imo, it would be better to use metaclasses Instead of additional decorator for every scenario class. Something like - http://paste.openstack.org/show/424202/\n\nWhat do you think about it?","commit_id":"c4e9687aa26841bf24234b6ec011dfe2f11a6496"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"6898129767c2708c7f26d4946c2a28031fa357a7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    FuncPlugin pointer to method. What should be done is to set properly"},{"line_number":64,"context_line":"    FuncPluing.func_ref to the cls.method"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    This decorator iterates over all cls methods and fix func_ref of FuncPlugin"},{"line_number":67,"context_line":"    class so func_ref will be cls.method instead of FuncPlugin.method."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    Additionally this decorator sets plugin names if they were not set explicit"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_fa22b0a2","line":66,"updated":"2015-08-24 19:57:19.000000000","message":"s/decorator/MetaClass","commit_id":"49399cfb51bb213c822147ba477187588c05e13c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"6898129767c2708c7f26d4946c2a28031fa357a7","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    This decorator iterates over all cls methods and fix func_ref of FuncPlugin"},{"line_number":67,"context_line":"    class so func_ref will be cls.method instead of FuncPlugin.method."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    Additionally this decorator sets plugin names if they were not set explicit"},{"line_number":70,"context_line":"    via configure(). Default name is \u003ccls_name\u003e.\u003cmethod_name\u003e"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    As well we need to keep cls_ref inside of _meta because Python3 loves us."}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_ba3518dc","line":69,"updated":"2015-08-24 19:57:19.000000000","message":"same here","commit_id":"49399cfb51bb213c822147ba477187588c05e13c"}]}
