)]}'
{"rally-scenarios/rally.yaml":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"7fff13f3218282003d991946bfa213d2b4261e7b","unresolved":false,"context_lines":[{"line_number":264,"context_line":"      context:"},{"line_number":265,"context_line":"          users:"},{"line_number":266,"context_line":"            tenants: 100"},{"line_number":267,"context_line":"            users_per_tenant: 1"},{"line_number":268,"context_line":"      sla:"},{"line_number":269,"context_line":"        max_failure_percent: 0"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":51,"id":"5a890539_ad903eed","line":267,"updated":"2014-11-12 12:58:43.000000000","message":"please make something more interesting. \n\ntenants: 40\nusers: 30","commit_id":"1b4aec400d0becf684f1d1673c1859e343f9f98d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"fcc9f0195b007f6443d9f833a341f4b6f6670cc7","unresolved":false,"context_lines":[{"line_number":264,"context_line":"      context:"},{"line_number":265,"context_line":"          users:"},{"line_number":266,"context_line":"            tenants: 30"},{"line_number":267,"context_line":"            users_per_tenant: 40"},{"line_number":268,"context_line":"      sla:"},{"line_number":269,"context_line":"        max_failure_percent: 0"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":55,"id":"5a890539_ddffd7a8","line":267,"updated":"2014-11-13 03:15:55.000000000","message":"This creates 1200 users (actually it\u0027s tooo much for testing purpose) \n\nThat takes about 1.5 minute in gates (to create and cleanup)\n\nI think it make sense to reduce amount of users like 15 (so will create only 450 users) and it will take about 30 seconds. Which is not so bad\u003d)","commit_id":"5048b5f2063d57fcc2d1e60712a25eee6832f8d1"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"3f0d6ec20e046cbd6458d609475fa10f89e93917","unresolved":false,"context_lines":[{"line_number":264,"context_line":"      context:"},{"line_number":265,"context_line":"          users:"},{"line_number":266,"context_line":"            tenants: 30"},{"line_number":267,"context_line":"            users_per_tenant: 40"},{"line_number":268,"context_line":"      sla:"},{"line_number":269,"context_line":"        max_failure_percent: 0"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":55,"id":"5a890539_4bcf987f","line":267,"in_reply_to":"5a890539_ddffd7a8","updated":"2014-11-13 09:40:20.000000000","message":"Done","commit_id":"5048b5f2063d57fcc2d1e60712a25eee6832f8d1"}],"rally/benchmark/context/tempest.py":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"2a2845c6290d06c381e63693c7eb5b58159acc5f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        except exceptions.TempestSetupFailure:"},{"line_number":52,"context_line":"            msg \u003d _(\"Failing to install tempest.\")"},{"line_number":53,"context_line":"            LOG.error(msg)"},{"line_number":54,"context_line":"            raise exceptions.ContextSetupFailure(ctx_name\u003dself.__ctx_name__,"},{"line_number":55,"context_line":"                                                 message\u003dmsg)"},{"line_number":56,"context_line":"        except exceptions.TempestConfigCreationFailure:"},{"line_number":57,"context_line":"            msg \u003d _(\"Failing to configure tempest.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"da9df570_58687aba","line":54,"updated":"2014-09-23 08:48:09.000000000","message":"We have too much places with catching and re-raising exceptions. Hate this spaghetti","commit_id":"7988f614c30ddb94fea505aa5caa4716426aff25"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5dd6a83401e7be2b3e0ae4495036016c7c06b309","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        except exceptions.TempestSetupFailure:"},{"line_number":52,"context_line":"            msg \u003d _(\"Failing to install tempest.\")"},{"line_number":53,"context_line":"            LOG.error(msg)"},{"line_number":54,"context_line":"            raise exceptions.ContextSetupFailure(ctx_name\u003dself.__ctx_name__,"},{"line_number":55,"context_line":"                                                 msg\u003dmsg)"},{"line_number":56,"context_line":"        except exceptions.TempestConfigCreationFailure:"},{"line_number":57,"context_line":"            msg \u003d _(\"Failing to configure tempest.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_8d740469","line":54,"updated":"2014-10-07 07:28:33.000000000","message":"Actually I dislike such code, just imaging something failed... \n\nTo understand what failed you\u0027ll need to change the code to debug it. \n\n\nI would prefer just code: \n\n  if not self.verifier.is_installed():\n    self.verifier.install()\n  if not self.verifier.is_configured():\n    self.verifier.generate_config_file()\n\n\nwithout any try:except \n\n\nFYI I am working on code that will handle exceptions from context.","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"b261a1f8fd4ba794613326fe6d758bdd5e042121","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        except exceptions.TempestSetupFailure:"},{"line_number":52,"context_line":"            msg \u003d _(\"Failing to install tempest.\")"},{"line_number":53,"context_line":"            LOG.error(msg)"},{"line_number":54,"context_line":"            raise exceptions.ContextSetupFailure(ctx_name\u003dself.__ctx_name__,"},{"line_number":55,"context_line":"                                                 msg\u003dmsg)"},{"line_number":56,"context_line":"        except exceptions.TempestConfigCreationFailure:"},{"line_number":57,"context_line":"            msg \u003d _(\"Failing to configure tempest.\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_1a948189","line":54,"in_reply_to":"baa201ad_8d740469","updated":"2014-10-08 13:21:54.000000000","message":"Agree. Actually this is not related to the user context, so let just leave this refactoring to another patch.","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"}],"rally/benchmark/context/users.py":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"2a2845c6290d06c381e63693c7eb5b58159acc5f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                                          user_dom)"},{"line_number":132,"context_line":"            except Exception as ex:"},{"line_number":133,"context_line":"                LOG.warning(\"Failed to create user for tenant %(tenant)s: \""},{"line_number":134,"context_line":"                            \"%(ex)s\" % {\"tenant\": tenant.id, \"ex\": ex})"},{"line_number":135,"context_line":"                success \u003d False"},{"line_number":136,"context_line":"                break"},{"line_number":137,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da9df570_981d8269","line":134,"updated":"2014-09-23 08:48:09.000000000","message":"Traceback is lost here, and this make debugging near impossible.","commit_id":"7988f614c30ddb94fea505aa5caa4716426aff25"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"1c65cd55c7902044e02081cec39b8ad6e63bc952","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                            \"%(ex)s\" % {\"tenant\": tenant.id, \"ex\": ex})"},{"line_number":135,"context_line":"                success \u003d False"},{"line_number":136,"context_line":"                break"},{"line_number":137,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"},{"line_number":138,"context_line":"                                              \"password\", tenant.name,"},{"line_number":139,"context_line":"                                              consts.EndpointPermission.USER,"},{"line_number":140,"context_line":"                                              client.region_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da9df570_c953ec6a","line":137,"updated":"2014-09-21 06:10:16.000000000","message":"This will rise one more time exception, in case of first iteration to user create will fail. \n\nPlus it will put 2 times similar user_endpoint in other case..","commit_id":"7988f614c30ddb94fea505aa5caa4716426aff25"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"697a15a301be00e69cda33d48ba7a79b7234f251","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                            \"%(ex)s\" % {\"tenant\": tenant.id, \"ex\": ex})"},{"line_number":135,"context_line":"                success \u003d False"},{"line_number":136,"context_line":"                break"},{"line_number":137,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"},{"line_number":138,"context_line":"                                              \"password\", tenant.name,"},{"line_number":139,"context_line":"                                              consts.EndpointPermission.USER,"},{"line_number":140,"context_line":"                                              client.region_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"da9df570_5feece23","line":137,"in_reply_to":"da9df570_c953ec6a","updated":"2014-09-21 11:47:59.000000000","message":"No, it will not, since there is a \"break\" on L136","commit_id":"7988f614c30ddb94fea505aa5caa4716426aff25"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"1c65cd55c7902044e02081cec39b8ad6e63bc952","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                          \"endpoint\": user_endpoint,"},{"line_number":145,"context_line":"                          \"tenant_id\": tenant.id})"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        return ({\"id\": tenant.id, \"name\": tenant.name}, users, success)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @staticmethod"},{"line_number":150,"context_line":"    def _remove_associated_networks(admin_endpoint, tenants):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da9df570_49c7fc12","line":147,"updated":"2014-09-21 06:10:16.000000000","message":"I really dislike this... with success stuff...\n\nCan we somehow refactor a bit this code, to make it cleaner? \n\nBecause this solution looks a bit dirty for me...","commit_id":"7988f614c30ddb94fea505aa5caa4716426aff25"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"697a15a301be00e69cda33d48ba7a79b7234f251","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                          \"endpoint\": user_endpoint,"},{"line_number":145,"context_line":"                          \"tenant_id\": tenant.id})"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        return ({\"id\": tenant.id, \"name\": tenant.name}, users, success)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @staticmethod"},{"line_number":150,"context_line":"    def _remove_associated_networks(admin_endpoint, tenants):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da9df570_dfd9de84","line":147,"in_reply_to":"da9df570_49c7fc12","updated":"2014-09-21 11:47:59.000000000","message":"\"Refactor a bit\" - no, I believe. We either leave it so or have to re-implement the whole concurrent user creation stuff, which isn\u0027t cool either.\n\nI see no other way - do you have any ideas?","commit_id":"7988f614c30ddb94fea505aa5caa4716426aff25"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"a1e382f2fba0776df1cafd5ac649c5523bd7fc09","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            except Exception as ex:"},{"line_number":143,"context_line":"                LOG.warning(_(\"Failed to create user for tenant %(tenant)s: \""},{"line_number":144,"context_line":"                              \"%(ex)s\") % {\"tenant\": tenant[\"id\"], \"ex\": ex})"},{"line_number":145,"context_line":"                LOG.debug(\"Failed to create user.\", exc_info\u003dsys.exc_info())"},{"line_number":146,"context_line":"                break"},{"line_number":147,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"},{"line_number":148,"context_line":"                                              \"password\", tenant[\"name\"],"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_06a06a42","line":145,"updated":"2014-09-30 09:36:32.000000000","message":"Why `LOG.exception` is not used here?","commit_id":"716c73a796367e4a054c57c3cc9ff3c5b60e2685"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"8569636f159dbefbb5f4ecdc1e709368a419aa95","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            except Exception as ex:"},{"line_number":143,"context_line":"                LOG.warning(_(\"Failed to create user for tenant %(tenant)s: \""},{"line_number":144,"context_line":"                              \"%(ex)s\") % {\"tenant\": tenant[\"id\"], \"ex\": ex})"},{"line_number":145,"context_line":"                LOG.debug(\"Failed to create user.\", exc_info\u003dsys.exc_info())"},{"line_number":146,"context_line":"                break"},{"line_number":147,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"},{"line_number":148,"context_line":"                                              \"password\", tenant[\"name\"],"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_296ffe93","line":145,"in_reply_to":"baa201ad_06a06a42","updated":"2014-09-30 12:06:29.000000000","message":"We\u0027ll raise an exception anyway in L253. Here, the output is a bit filled with details, so it\u0027s better to keep it in \u0027debug\u0027 mode","commit_id":"716c73a796367e4a054c57c3cc9ff3c5b60e2685"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"bb7ac32b4897f56183f3276cf076747bf2e51c02","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            except Exception as ex:"},{"line_number":143,"context_line":"                LOG.warning(_(\"Failed to create user for tenant %(tenant)s: \""},{"line_number":144,"context_line":"                              \"%(ex)s\") % {\"tenant\": tenant[\"id\"], \"ex\": ex})"},{"line_number":145,"context_line":"                LOG.debug(\"Failed to create user.\", exc_info\u003dsys.exc_info())"},{"line_number":146,"context_line":"                break"},{"line_number":147,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"},{"line_number":148,"context_line":"                                              \"password\", tenant[\"name\"],"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_691746ee","line":145,"in_reply_to":"baa201ad_296ffe93","updated":"2014-09-30 12:11:35.000000000","message":"Besides, we actually don\u0027t raise an exception here, we just process it","commit_id":"716c73a796367e4a054c57c3cc9ff3c5b60e2685"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"99499af8ebc6e7b39a03afe1394d7d882d9c84cd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            except Exception as ex:"},{"line_number":143,"context_line":"                LOG.warning(_(\"Failed to create user for tenant %(tenant)s: \""},{"line_number":144,"context_line":"                              \"%(ex)s\") % {\"tenant\": tenant[\"id\"], \"ex\": ex})"},{"line_number":145,"context_line":"                LOG.debug(\"Failed to create user.\", exc_info\u003dsys.exc_info())"},{"line_number":146,"context_line":"                break"},{"line_number":147,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"},{"line_number":148,"context_line":"                                              \"password\", tenant[\"name\"],"}],"source_content_type":"text/x-python","patch_set":12,"id":"baa201ad_68b720d9","line":145,"in_reply_to":"baa201ad_691746ee","updated":"2014-10-01 15:09:02.000000000","message":"Dont\u0027 log exception is such paces. Users will think that Rally fails, and it\u0027s common situation that OpenStack doesn\u0027t work","commit_id":"716c73a796367e4a054c57c3cc9ff3c5b60e2685"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9d58157ece1398d7548d5b89b1ec2aea47e10140","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import sys"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo.config import cfg"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"baa201ad_be421e0e","line":16,"updated":"2014-10-01 15:56:43.000000000","message":"this module is not used.","commit_id":"4a00ed201f17b8b06323aba192ce5952954d1a87"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9d58157ece1398d7548d5b89b1ec2aea47e10140","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                LOG.warning(_(\"Failed to create user for tenant %(tenant)s: \""},{"line_number":144,"context_line":"                              \"%(ex)s\") % {\"tenant\": tenant[\"id\"], \"ex\": ex})"},{"line_number":145,"context_line":"                if cfg.CONF.debug:"},{"line_number":146,"context_line":"                    LOG.exception(ex)"},{"line_number":147,"context_line":"                break"},{"line_number":148,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"},{"line_number":149,"context_line":"                                              \"password\", tenant[\"name\"],"}],"source_content_type":"text/x-python","patch_set":16,"id":"baa201ad_9ed47a48","line":146,"updated":"2014-10-01 15:56:43.000000000","message":"I really like this variant:)","commit_id":"4a00ed201f17b8b06323aba192ce5952954d1a87"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5dd6a83401e7be2b3e0ae4495036016c7c06b309","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def _create_tenant(cls, args):"},{"line_number":107,"context_line":"        \"\"\"Create a single tenant."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        This method is suitable for using with pool of threads."},{"line_number":110,"context_line":"        :param args: tuple arguments, for Pool.imap()"},{"line_number":111,"context_line":"        :returns: dict tenant"},{"line_number":112,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_2da95891","line":109,"updated":"2014-10-07 07:28:33.000000000","message":"please add one extra blank line after this line to split param secetion and description","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"b261a1f8fd4ba794613326fe6d758bdd5e042121","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def _create_tenant(cls, args):"},{"line_number":107,"context_line":"        \"\"\"Create a single tenant."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        This method is suitable for using with pool of threads."},{"line_number":110,"context_line":"        :param args: tuple arguments, for Pool.imap()"},{"line_number":111,"context_line":"        :returns: dict tenant"},{"line_number":112,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_5a4fe933","line":109,"in_reply_to":"baa201ad_2da95891","updated":"2014-10-08 13:21:54.000000000","message":"Done","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5dd6a83401e7be2b3e0ae4495036016c7c06b309","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    def _create_users(cls, args):"},{"line_number":123,"context_line":"        \"\"\"Create users for a given tenant."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        This method is suitable for using with pool of threads."},{"line_number":126,"context_line":"        :param args: tuple arguments, for Pool.imap()"},{"line_number":127,"context_line":"        :returns: list users"},{"line_number":128,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_6dafe094","line":125,"updated":"2014-10-07 07:28:33.000000000","message":"same here","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"b261a1f8fd4ba794613326fe6d758bdd5e042121","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    def _create_users(cls, args):"},{"line_number":123,"context_line":"        \"\"\"Create users for a given tenant."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        This method is suitable for using with pool of threads."},{"line_number":126,"context_line":"        :param args: tuple arguments, for Pool.imap()"},{"line_number":127,"context_line":"        :returns: list users"},{"line_number":128,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_7a610da8","line":125,"in_reply_to":"baa201ad_6dafe094","updated":"2014-10-08 13:21:54.000000000","message":"Done","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5dd6a83401e7be2b3e0ae4495036016c7c06b309","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        \"\"\"Create users for a given tenant."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        This method is suitable for using with pool of threads."},{"line_number":126,"context_line":"        :param args: tuple arguments, for Pool.imap()"},{"line_number":127,"context_line":"        :returns: list users"},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_2d3958f3","line":126,"updated":"2014-10-07 07:28:33.000000000","message":"this is very very bad description of arguments. \n\nA) who cares who is using this method (it\u0027s about for Poolimap())\n\nB) You didn\u0027t describe what actually inside args is.","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"b261a1f8fd4ba794613326fe6d758bdd5e042121","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        \"\"\"Create users for a given tenant."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        This method is suitable for using with pool of threads."},{"line_number":126,"context_line":"        :param args: tuple arguments, for Pool.imap()"},{"line_number":127,"context_line":"        :returns: list users"},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_9a64f1b9","line":126,"in_reply_to":"baa201ad_2d3958f3","updated":"2014-10-08 13:21:54.000000000","message":"Done","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5dd6a83401e7be2b3e0ae4495036016c7c06b309","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        admin_endpoint, users_num, project_dom, user_dom, tenant \u003d args"},{"line_number":131,"context_line":"        client \u003d keystone.wrap(osclients.Clients(admin_endpoint).keystone())"},{"line_number":132,"context_line":"        users \u003d []"},{"line_number":133,"context_line":"        for user_id in range(users_num):"},{"line_number":134,"context_line":"            username \u003d cls.PATTERN_USER % {\"tenant_id\": tenant[\"id\"],"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_d8aeac97","line":131,"updated":"2014-10-07 07:28:33.000000000","message":"what will happen if this line fails?\n\nI think something really wired\u003d)","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"b261a1f8fd4ba794613326fe6d758bdd5e042121","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        admin_endpoint, users_num, project_dom, user_dom, tenant \u003d args"},{"line_number":131,"context_line":"        client \u003d keystone.wrap(osclients.Clients(admin_endpoint).keystone())"},{"line_number":132,"context_line":"        users \u003d []"},{"line_number":133,"context_line":"        for user_id in range(users_num):"},{"line_number":134,"context_line":"            username \u003d cls.PATTERN_USER % {\"tenant_id\": tenant[\"id\"],"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_3a9ea563","line":131,"in_reply_to":"baa201ad_d8aeac97","updated":"2014-10-08 13:21:54.000000000","message":"Wrapped this in a try..catch statement","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5dd6a83401e7be2b3e0ae4495036016c7c06b309","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            username \u003d cls.PATTERN_USER % {\"tenant_id\": tenant[\"id\"],"},{"line_number":135,"context_line":"                                           \"uid\": user_id}"},{"line_number":136,"context_line":"            try:"},{"line_number":137,"context_line":"                user \u003d client.create_user(username, \"password\","},{"line_number":138,"context_line":"                                          \"%s@email.me\" % username,"},{"line_number":139,"context_line":"                                          tenant[\"id\"], user_dom)"},{"line_number":140,"context_line":"            except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_e8181e77","line":137,"updated":"2014-10-07 07:28:33.000000000","message":"This is very big security issue (if we are going to run rally against different clodus) \n\nI believe that instead of \"password\" we should use uuid.uuid4()","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"b261a1f8fd4ba794613326fe6d758bdd5e042121","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            username \u003d cls.PATTERN_USER % {\"tenant_id\": tenant[\"id\"],"},{"line_number":135,"context_line":"                                           \"uid\": user_id}"},{"line_number":136,"context_line":"            try:"},{"line_number":137,"context_line":"                user \u003d client.create_user(username, \"password\","},{"line_number":138,"context_line":"                                          \"%s@email.me\" % username,"},{"line_number":139,"context_line":"                                          tenant[\"id\"], user_dom)"},{"line_number":140,"context_line":"            except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_daad999c","line":137,"in_reply_to":"baa201ad_e8181e77","updated":"2014-10-08 13:21:54.000000000","message":"Done","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5dd6a83401e7be2b3e0ae4495036016c7c06b309","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            except Exception as ex:"},{"line_number":141,"context_line":"                LOG.warning(_(\"Failed to create user for tenant %(tenant)s: \""},{"line_number":142,"context_line":"                              \"%(ex)s\") % {\"tenant\": tenant[\"id\"], \"ex\": ex})"},{"line_number":143,"context_line":"                if cfg.CONF.debug:"},{"line_number":144,"context_line":"                    LOG.exception(ex)"},{"line_number":145,"context_line":"                break"},{"line_number":146,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_f8cff07c","line":143,"updated":"2014-10-07 07:28:33.000000000","message":"Actually this is bad message for operator, that is running rally. \n\nIt should be something like: \n\nFailed to create user \u003cuser_id\u003e. Because \u003cexcp\u003e","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"b261a1f8fd4ba794613326fe6d758bdd5e042121","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            except Exception as ex:"},{"line_number":141,"context_line":"                LOG.warning(_(\"Failed to create user for tenant %(tenant)s: \""},{"line_number":142,"context_line":"                              \"%(ex)s\") % {\"tenant\": tenant[\"id\"], \"ex\": ex})"},{"line_number":143,"context_line":"                if cfg.CONF.debug:"},{"line_number":144,"context_line":"                    LOG.exception(ex)"},{"line_number":145,"context_line":"                break"},{"line_number":146,"context_line":"            user_endpoint \u003d endpoint.Endpoint(client.auth_url, user.name,"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_dae919b8","line":143,"in_reply_to":"baa201ad_f8cff07c","updated":"2014-10-08 13:21:54.000000000","message":"Done","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5dd6a83401e7be2b3e0ae4495036016c7c06b309","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                  {\"tenants\": self.config[\"tenants\"],"},{"line_number":231,"context_line":"                   \"threads\": self.config[\"concurrent\"]})"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        for tenant in utils.run_concurrent(self.config[\"concurrent\"],"},{"line_number":234,"context_line":"                                           UserGenerator, \"_create_tenant\","},{"line_number":235,"context_line":"                                           args):"},{"line_number":236,"context_line":"            self.context[\"tenants\"].append(tenant)"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_38efb8ea","line":233,"updated":"2014-10-07 07:28:33.000000000","message":"as you are refactoring this change name of this config option. It\u0027s really misleading. \n\nLet\u0027s call it something like: \"number_of_threads_used_for_creation\"\n\nI know it\u0027s quite long, but at least new users won\u0027t make wrong conclusions\u003d)","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"b261a1f8fd4ba794613326fe6d758bdd5e042121","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                  {\"tenants\": self.config[\"tenants\"],"},{"line_number":231,"context_line":"                   \"threads\": self.config[\"concurrent\"]})"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        for tenant in utils.run_concurrent(self.config[\"concurrent\"],"},{"line_number":234,"context_line":"                                           UserGenerator, \"_create_tenant\","},{"line_number":235,"context_line":"                                           args):"},{"line_number":236,"context_line":"            self.context[\"tenants\"].append(tenant)"}],"source_content_type":"text/x-python","patch_set":17,"id":"baa201ad_ba3a95e4","line":233,"in_reply_to":"baa201ad_38efb8ea","updated":"2014-10-08 13:21:54.000000000","message":"I suggest just \"threads\" to keep it simple (and also this value is used not only for creation, but also for deletion)","commit_id":"6de8d74bcb3e27bafc6a7005e832a545ce9d1ce5"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f262d8ddfe378dff0dd8bf0187c0a371e3bdbb2e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        super(UserGenerator, self).__init__(context)"},{"line_number":90,"context_line":"        self.config.setdefault(\"tenants\", 1)"},{"line_number":91,"context_line":"        self.config.setdefault(\"users_per_tenant\", 1)"},{"line_number":92,"context_line":"        self.config.setdefault(\"threads\","},{"line_number":93,"context_line":"                               cfg.CONF.users_context.threads)"},{"line_number":94,"context_line":"        self.config.setdefault(\"project_domain\","},{"line_number":95,"context_line":"                               cfg.CONF.users_context.project_domain)"}],"source_content_type":"text/x-python","patch_set":20,"id":"baa201ad_7d92e74c","line":92,"updated":"2014-10-08 13:25:56.000000000","message":"Threads sux! This is equal misleading as concurrent please write full name","commit_id":"e28538f34f816e1ff0e238cbf4ccd65f588b3870"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"7218fadddc08d25777790c983fe795578422b045","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"context_opts \u003d ["},{"line_number":35,"context_line":"    cfg.IntOpt(\"threads\","},{"line_number":36,"context_line":"               default\u003d30,"},{"line_number":37,"context_line":"               help\u003d\"How many concurrent threads use for serving users \""},{"line_number":38,"context_line":"                    \"context\"),"}],"source_content_type":"text/x-python","patch_set":23,"id":"baa201ad_868565d0","line":35,"updated":"2014-10-09 06:54:18.000000000","message":"Please don\u0027t ignore my comments. This argument is misleading as concurrent. No difference for end users. \n\nPlease use full  name.","commit_id":"77992fe7f84d1145ec52d3639b861759ee61c205"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"ddd49da61a2688fcd2553379595447c2bfbcb4f3","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            tenant_dict \u003d {\"id\": tenant.id, \"name\": tenant.name}"},{"line_number":150,"context_line":"            tenants.append(tenant_dict)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        # NOTE(msdubov): cosume() will fill the users list in the closure."},{"line_number":153,"context_line":"        broker.run(publish, consume, threads)"},{"line_number":154,"context_line":"        return tenants"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"7a8c0949_7a20fe9b","line":152,"updated":"2014-10-30 12:18:25.000000000","message":"tenants list?","commit_id":"48130efce7281bf84bf74db3f8c04782e8dcaa4f"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"22d4e8a63b42db5eafb446976491b9ca904482c7","unresolved":false,"context_lines":[{"line_number":149,"context_line":"            tenant_dict \u003d {\"id\": tenant.id, \"name\": tenant.name}"},{"line_number":150,"context_line":"            tenants.append(tenant_dict)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        # NOTE(msdubov): cosume() will fill the users list in the closure."},{"line_number":153,"context_line":"        broker.run(publish, consume, threads)"},{"line_number":154,"context_line":"        return tenants"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"7a8c0949_fa022eb3","line":152,"in_reply_to":"7a8c0949_7a20fe9b","updated":"2014-10-30 12:27:02.000000000","message":"Done","commit_id":"48130efce7281bf84bf74db3f8c04782e8dcaa4f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"9a60ff0cf681d7391814baa1384b35bc0a530fb6","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            if \"client\" not in cache:"},{"line_number":224,"context_line":"                cache[\"client\"] \u003d keystone.wrap(osclients.Clients("},{"line_number":225,"context_line":"                                                    self.endpoint).keystone())"},{"line_number":226,"context_line":"            client \u003d cache[\"client\"]"},{"line_number":227,"context_line":"            client.delete_user(user_id)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        broker.run(publish, consume, threads)"}],"source_content_type":"text/x-python","patch_set":49,"id":"7a8c0949_1e04f913","line":226,"updated":"2014-11-06 08:18:29.000000000","message":"maybe cache[\"client\"].delete_user(user_id)","commit_id":"8686264bc7710b08f530af129ac4ee56b4c5a152"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"824b76740ef58180d5cd10549c2fb76c73ca91ed","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            if \"client\" not in cache:"},{"line_number":224,"context_line":"                cache[\"client\"] \u003d keystone.wrap(osclients.Clients("},{"line_number":225,"context_line":"                                                    self.endpoint).keystone())"},{"line_number":226,"context_line":"            client \u003d cache[\"client\"]"},{"line_number":227,"context_line":"            client.delete_user(user_id)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        broker.run(publish, consume, threads)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5a890539_3ef9074e","line":226,"in_reply_to":"7a8c0949_1e04f913","updated":"2014-11-11 06:45:35.000000000","message":"Done","commit_id":"8686264bc7710b08f530af129ac4ee56b4c5a152"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"daddb5b8034c341a11d037c3e68efad4883a9eff","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        users \u003d []"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        def publish(queue):"},{"line_number":166,"context_line":"            for tenant in self.context[\"tenants\"]:"},{"line_number":167,"context_line":"                args \u003d (users_per_tenant, self.config[\"project_domain\"],"},{"line_number":168,"context_line":"                        self.config[\"user_domain\"], tenant)"}],"source_content_type":"text/x-python","patch_set":52,"id":"5a890539_d3f19ece","line":165,"updated":"2014-11-12 13:58:51.000000000","message":"You make this wrong. \n\n\nWhat you should do is to send to queue all users (one by one)\n\n(username, password, tenant_id, ...) \n\nIn consume process you should just create users from args that was passed.","commit_id":"26a45f813ba51a2e5aa15d24f80323cb2b7f9ed4"}],"tests/unit/benchmark/context/test_users.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"20a111bb930c7b71279ee4c711bf506d652f40ff","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        tenant2 \u003d mock.MagicMock()"},{"line_number":149,"context_line":"        user_generator.context[\"tenants\"] \u003d [tenant1, tenant2]"},{"line_number":150,"context_line":"        user_generator._delete_tenants()"},{"line_number":151,"context_line":"        self.assertEqual(1, mock_keystone.wrap.call_count)"},{"line_number":152,"context_line":"        wrapped_keystone.delete_project.assert_has_calls(["},{"line_number":153,"context_line":"            mock.call(tenant1[\"id\"]),"},{"line_number":154,"context_line":"            mock.call(tenant2[\"id\"])], any_order\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":49,"id":"7a8c0949_beba0521","line":151,"updated":"2014-11-06 08:21:22.000000000","message":"on my local run it was 2..","commit_id":"8686264bc7710b08f530af129ac4ee56b4c5a152"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"824b76740ef58180d5cd10549c2fb76c73ca91ed","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        tenant2 \u003d mock.MagicMock()"},{"line_number":149,"context_line":"        user_generator.context[\"tenants\"] \u003d [tenant1, tenant2]"},{"line_number":150,"context_line":"        user_generator._delete_tenants()"},{"line_number":151,"context_line":"        self.assertEqual(1, mock_keystone.wrap.call_count)"},{"line_number":152,"context_line":"        wrapped_keystone.delete_project.assert_has_calls(["},{"line_number":153,"context_line":"            mock.call(tenant1[\"id\"]),"},{"line_number":154,"context_line":"            mock.call(tenant2[\"id\"])], any_order\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":49,"id":"5a890539_fefe9f37","line":151,"in_reply_to":"7a8c0949_beba0521","updated":"2014-11-11 06:45:35.000000000","message":"Race condition detected","commit_id":"8686264bc7710b08f530af129ac4ee56b4c5a152"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"9a60ff0cf681d7391814baa1384b35bc0a530fb6","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        user_generator \u003d users.UserGenerator(context)"},{"line_number":192,"context_line":"        user1 \u003d mock.MagicMock()"},{"line_number":193,"context_line":"        user2 \u003d mock.MagicMock()"},{"line_number":194,"context_line":"        user_generator.context[\"users\"] \u003d [user1, user2]"},{"line_number":195,"context_line":"        user_generator._delete_users()"},{"line_number":196,"context_line":"        wrapped_keystone.delete_user.assert_has_calls(["},{"line_number":197,"context_line":"            mock.call(user1[\"id\"]),"}],"source_content_type":"text/x-python","patch_set":49,"id":"7a8c0949_de30b1ea","line":194,"updated":"2014-11-06 08:18:29.000000000","message":"put here [{\"id\": \"some_id\"}, {\"id\": \"some_other_id\"}] \nand I think it will pass test","commit_id":"8686264bc7710b08f530af129ac4ee56b4c5a152"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"824b76740ef58180d5cd10549c2fb76c73ca91ed","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        user_generator \u003d users.UserGenerator(context)"},{"line_number":192,"context_line":"        user1 \u003d mock.MagicMock()"},{"line_number":193,"context_line":"        user2 \u003d mock.MagicMock()"},{"line_number":194,"context_line":"        user_generator.context[\"users\"] \u003d [user1, user2]"},{"line_number":195,"context_line":"        user_generator._delete_users()"},{"line_number":196,"context_line":"        wrapped_keystone.delete_user.assert_has_calls(["},{"line_number":197,"context_line":"            mock.call(user1[\"id\"]),"}],"source_content_type":"text/x-python","patch_set":49,"id":"5a890539_1eb9ab2e","line":194,"in_reply_to":"7a8c0949_de30b1ea","updated":"2014-11-11 06:45:35.000000000","message":"Well the error was \"not all [mock calls] found in call list\", so seems like the issue is somewhere else","commit_id":"8686264bc7710b08f530af129ac4ee56b4c5a152"}]}
