)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c39f8075df283abaedb5e9258738b1e67acc743a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The follow-up patch would be additional CRUD scenarios for load balancer"},{"line_number":14,"context_line":"objects such as load balancer (some actions currently missing), Pools,"},{"line_number":15,"context_line":"Health Monitors etc."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ia865bbe72bfcfa9d96d7f4b628d8c2e1758d7007"},{"line_number":18,"context_line":"(cherry picked from commit d4f5d1eacffd49fb89fab700e6eb13c9a7cdd24c)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":63,"id":"3f79a3b5_9a658db3","line":16,"updated":"2018-10-30 12:52:08.000000000","message":"@Chuck, add here your ownership:\n\nCo-Authored-By: Chuck Short \u003cchucks@redhat.com\u003e","commit_id":"14b73a93ca3877fa0aef60d69fe3fd08b0f0cbff"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"65fc1fd37f12b77ec307cfe11bf71f94c7afa321","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The follow-up patch would be additional CRUD scenarios for load balancer"},{"line_number":14,"context_line":"objects such as load balancer (some actions currently missing), Pools,"},{"line_number":15,"context_line":"Health Monitors etc."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: Ia865bbe72bfcfa9d96d7f4b628d8c2e1758d7007"},{"line_number":18,"context_line":"(cherry picked from commit d4f5d1eacffd49fb89fab700e6eb13c9a7cdd24c)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":63,"id":"3f79a3b5_fd16fbf3","line":16,"in_reply_to":"3f79a3b5_9a658db3","updated":"2018-10-30 13:44:13.000000000","message":"Done","commit_id":"14b73a93ca3877fa0aef60d69fe3fd08b0f0cbff"}],"rally_openstack/cfg/octavia.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2050b053c0a19c5d1f6a2bb4c1e00e8c841ab359","unresolved":false,"context_lines":[{"line_number":18,"context_line":"OPTS \u003d {\"openstack\": ["},{"line_number":19,"context_line":"    cfg.FloatOpt(\"octavia_create_loadbalancer_timeout\","},{"line_number":20,"context_line":"                 default\u003dfloat(500),"},{"line_number":21,"context_line":"                 deprecated_group\u003d\"benchmark\","},{"line_number":22,"context_line":"                 help\u003d\"Octavia create loadbalancer timeout\"),"},{"line_number":23,"context_line":"    cfg.FloatOpt(\"octavia_delete_loadbalancer_timeout\","},{"line_number":24,"context_line":"                 default\u003dfloat(50),"}],"source_content_type":"text/x-python","patch_set":41,"id":"5f7c97a3_241faeb7","line":21,"range":{"start_line":21,"start_character":17,"end_line":21,"end_character":45},"updated":"2018-05-31 09:26:59.000000000","message":"it is a new option, do not need to add it to deprecated group.\nsame for other options","commit_id":"22be62bd82e28829beea174e04b1324336f4a520"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"3a31719d58ce5744c18b6247224a18e234efb6eb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"OPTS \u003d {\"openstack\": ["},{"line_number":19,"context_line":"    cfg.FloatOpt(\"octavia_create_loadbalancer_timeout\","},{"line_number":20,"context_line":"                 default\u003dfloat(500),"},{"line_number":21,"context_line":"                 deprecated_group\u003d\"benchmark\","},{"line_number":22,"context_line":"                 help\u003d\"Octavia create loadbalancer timeout\"),"},{"line_number":23,"context_line":"    cfg.FloatOpt(\"octavia_delete_loadbalancer_timeout\","},{"line_number":24,"context_line":"                 default\u003dfloat(50),"}],"source_content_type":"text/x-python","patch_set":41,"id":"3f79a3b5_44b6e18c","line":21,"range":{"start_line":21,"start_character":17,"end_line":21,"end_character":45},"in_reply_to":"5f7c97a3_241faeb7","updated":"2018-09-17 23:47:11.000000000","message":"Done","commit_id":"22be62bd82e28829beea174e04b1324336f4a520"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c39f8075df283abaedb5e9258738b1e67acc743a","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"OPTS \u003d {\"openstack\": ["},{"line_number":19,"context_line":"    cfg.FloatOpt(\"octavia_create_loadbalancer_timeout\","},{"line_number":20,"context_line":"                 default\u003dfloat(500),"},{"line_number":21,"context_line":"                 help\u003d\"Octavia create loadbalancer timeout\"),"},{"line_number":22,"context_line":"    cfg.FloatOpt(\"octavia_delete_loadbalancer_timeout\","},{"line_number":23,"context_line":"                 default\u003dfloat(50),"}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_da0a251e","line":20,"range":{"start_line":20,"start_character":25,"end_line":20,"end_character":35},"updated":"2018-10-30 12:52:08.000000000","message":"why we need this transformation? Why not just `500.0` ?","commit_id":"14b73a93ca3877fa0aef60d69fe3fd08b0f0cbff"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"65fc1fd37f12b77ec307cfe11bf71f94c7afa321","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"OPTS \u003d {\"openstack\": ["},{"line_number":19,"context_line":"    cfg.FloatOpt(\"octavia_create_loadbalancer_timeout\","},{"line_number":20,"context_line":"                 default\u003dfloat(500),"},{"line_number":21,"context_line":"                 help\u003d\"Octavia create loadbalancer timeout\"),"},{"line_number":22,"context_line":"    cfg.FloatOpt(\"octavia_delete_loadbalancer_timeout\","},{"line_number":23,"context_line":"                 default\u003dfloat(50),"}],"source_content_type":"text/x-python","patch_set":63,"id":"3f79a3b5_bd1083f6","line":20,"range":{"start_line":20,"start_character":25,"end_line":20,"end_character":35},"in_reply_to":"3f79a3b5_da0a251e","updated":"2018-10-30 13:44:13.000000000","message":"Done","commit_id":"14b73a93ca3877fa0aef60d69fe3fd08b0f0cbff"}],"rally_openstack/contexts/octavia/loadbalancers.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"19c16262f5dd86002ca3b00e206da0b2ef279258","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        # Creates a loadbalancer for every subnet created in network context."},{"line_number":47,"context_line":"        for user, tenant_id in (utils.iterate_per_tenants("},{"line_number":48,"context_line":"                self.context.get(\"users\", []))):"},{"line_number":49,"context_line":"            scenario \u003d octavia_utils.OctaviaScenario("},{"line_number":50,"context_line":"                context\u003d{\"user\": user, \"task\": self.context[\"task\"],"},{"line_number":51,"context_line":"                         \"owner_id\": self.context[\"owner_id\"]}"},{"line_number":52,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_30538019","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":53},"updated":"2018-04-01 18:36:49.000000000","message":"need to use service class instead","commit_id":"6996f3ad0899447173536dc4f9e7c6d75fe036fe"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"19c16262f5dd86002ca3b00e206da0b2ef279258","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                        lb)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def cleanup(self):"},{"line_number":60,"context_line":"        for user, tenant_id in (utils.iterate_per_tenants("},{"line_number":61,"context_line":"                self.context.get(\"users\", []))):"},{"line_number":62,"context_line":"            scenario \u003d octavia_utils.OctaviaScenario("},{"line_number":63,"context_line":"                context\u003d{\"user\": user, \"task\": self.context[\"task\"],"},{"line_number":64,"context_line":"                         \"owner_id\": self.context[\"owner_id\"]}"},{"line_number":65,"context_line":"            )"},{"line_number":66,"context_line":"            for loadbalancer in (self.context[\"tenants\"][tenant_id]"},{"line_number":67,"context_line":"                                 [\"loadbalancer\"]):"},{"line_number":68,"context_line":"                scenario.delete_loadbalancer(loadbalancer[\"loadbalancer\"]"},{"line_number":69,"context_line":"                                             [\"id\"])"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_f058a831","line":69,"range":{"start_line":60,"start_character":8,"end_line":69,"end_character":52},"updated":"2018-04-01 18:36:49.000000000","message":"do something like https://github.com/openstack/rally-openstack/blob/master/rally_openstack/contexts/cinder/volumes.py#L79-L84","commit_id":"6996f3ad0899447173536dc4f9e7c6d75fe036fe"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"7047e95b1e826065afb4c9224cd938066c58262b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                        lb)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def cleanup(self):"},{"line_number":60,"context_line":"        for user, tenant_id in (utils.iterate_per_tenants("},{"line_number":61,"context_line":"                self.context.get(\"users\", []))):"},{"line_number":62,"context_line":"            scenario \u003d octavia_utils.OctaviaScenario("},{"line_number":63,"context_line":"                context\u003d{\"user\": user, \"task\": self.context[\"task\"],"},{"line_number":64,"context_line":"                         \"owner_id\": self.context[\"owner_id\"]}"},{"line_number":65,"context_line":"            )"},{"line_number":66,"context_line":"            for loadbalancer in (self.context[\"tenants\"][tenant_id]"},{"line_number":67,"context_line":"                                 [\"loadbalancer\"]):"},{"line_number":68,"context_line":"                scenario.delete_loadbalancer(loadbalancer[\"loadbalancer\"]"},{"line_number":69,"context_line":"                                             [\"id\"])"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_509dd463","line":69,"range":{"start_line":60,"start_character":8,"end_line":69,"end_character":52},"in_reply_to":"bf659307_f058a831","updated":"2018-04-01 22:10:18.000000000","message":"alright.\nPlease take another look at the next PS and let me know if it looks okay now, thanks :)","commit_id":"6996f3ad0899447173536dc4f9e7c6d75fe036fe"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"8e182d225515b106669bddfa839a5dbd2bc2fc3e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", admin\u003dTrue,"},{"line_number":30,"context_line":"                users\u003dTrue)"},{"line_number":31,"context_line":"@context.configure(name\u003d\"loadbalancers\", platform\u003d\"openstack\", order\u003d300)"},{"line_number":32,"context_line":"class LoadbalancerGenerator(context.Context):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_2a50eb0a","line":29,"range":{"start_line":29,"start_character":59,"end_line":29,"end_character":70},"updated":"2018-04-02 09:59:14.000000000","message":"it looks like your context doesn\u0027t use admin user.","commit_id":"b67e2aaaca2e4ca59221365a0e60bf40e8a1459b"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"58bbe20ed4717eb656a5ee34b84995c1782b9644","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", admin\u003dTrue,"},{"line_number":30,"context_line":"                users\u003dTrue)"},{"line_number":31,"context_line":"@context.configure(name\u003d\"loadbalancers\", platform\u003d\"openstack\", order\u003d300)"},{"line_number":32,"context_line":"class LoadbalancerGenerator(context.Context):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_64315e0b","line":29,"range":{"start_line":29,"start_character":59,"end_line":29,"end_character":70},"in_reply_to":"bf659307_2a50eb0a","updated":"2018-04-11 20:43:52.000000000","message":"meaning I should change this to false?","commit_id":"b67e2aaaca2e4ca59221365a0e60bf40e8a1459b"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2050b053c0a19c5d1f6a2bb4c1e00e8c841ab359","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # Creates a loadbalancer for every subnet created in network context."},{"line_number":48,"context_line":"        for user, tenant_id in (utils.iterate_per_tenants("},{"line_number":49,"context_line":"                self.context.get(\"users\", []))):"},{"line_number":50,"context_line":"            scenario \u003d octavia_utils.OctaviaScenario("},{"line_number":51,"context_line":"                context\u003d{\"user\": user, \"task\": self.context[\"task\"],"},{"line_number":52,"context_line":"                         \"owner_id\": self.context[\"owner_id\"]}"},{"line_number":53,"context_line":"            )"},{"line_number":54,"context_line":"            for network in self.context[\"tenants\"][tenant_id][\"networks\"]:"},{"line_number":55,"context_line":"                for subnet in network.get(\"subnets\", []):"},{"line_number":56,"context_line":"                    lb \u003d scenario.create_loadbalancer(subnet[\"id\"])"}],"source_content_type":"text/x-python","patch_set":41,"id":"5f7c97a3_047e32e3","line":53,"range":{"start_line":50,"start_character":12,"end_line":53,"end_character":13},"updated":"2018-05-31 09:26:59.000000000","message":"No need to use Scenario class here, use OctaviaService directly instead.","commit_id":"22be62bd82e28829beea174e04b1324336f4a520"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2050b053c0a19c5d1f6a2bb4c1e00e8c841ab359","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            names\u003d[\"octavia.loadbalancers\"],"},{"line_number":63,"context_line":"            users\u003dself.context.get(\"users\", []),"},{"line_number":64,"context_line":"            api_versions\u003dself.context[\"config\"].get(\"api_versions\"),"},{"line_number":65,"context_line":"            superclass\u003doctavia_utils.OctaviaScenario,"},{"line_number":66,"context_line":"            task_id\u003dself.get_owner_id())"}],"source_content_type":"text/x-python","patch_set":41,"id":"5f7c97a3_a4809ec0","line":65,"range":{"start_line":65,"start_character":23,"end_line":65,"end_character":52},"updated":"2018-05-31 09:26:59.000000000","message":"do not forget to put self.__class__ after fixing the comment above","commit_id":"22be62bd82e28829beea174e04b1324336f4a520"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3189c42ad43061cc0fe6d9d267aa61aa4765d4b7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # Creates a loadbalancer for every subnet created in network context."},{"line_number":48,"context_line":"        for user, tenant_id in (utils.iterate_per_tenants("},{"line_number":49,"context_line":"                self.context.get(\"users\", []))):"},{"line_number":50,"context_line":"            scenario \u003d octavia_utils.OctaviaScenario("},{"line_number":51,"context_line":"                context\u003d{\"user\": user, \"task\": self.context[\"task\"],"},{"line_number":52,"context_line":"                         \"owner_id\": self.context[\"owner_id\"]}"},{"line_number":53,"context_line":"            )"},{"line_number":54,"context_line":"            for network in self.context[\"tenants\"][tenant_id][\"networks\"]:"},{"line_number":55,"context_line":"                for subnet in network.get(\"subnets\", []):"},{"line_number":56,"context_line":"                    lb \u003d scenario.create_loadbalancer(subnet[\"id\"])"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f79a3b5_89331813","line":53,"range":{"start_line":50,"start_character":12,"end_line":53,"end_character":13},"updated":"2018-09-21 14:56:21.000000000","message":"I did not check the coverage report, but I can guess that this piece of code doesn\u0027t have unittests. OctaviaScenario doesn\u0027t have create_loadbalancer method which is used at L56, it was moved to OctaviaService.","commit_id":"ac68b6ac38fbc96d659290aa4e5563dc09bc0ba1"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"fe4ed6363ad73bc702ad5dbeb4b0dc2f81f49bc5","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # Creates a loadbalancer for every subnet created in network context."},{"line_number":48,"context_line":"        for user, tenant_id in (utils.iterate_per_tenants("},{"line_number":49,"context_line":"                self.context.get(\"users\", []))):"},{"line_number":50,"context_line":"            scenario \u003d octavia_utils.OctaviaScenario("},{"line_number":51,"context_line":"                context\u003d{\"user\": user, \"task\": self.context[\"task\"],"},{"line_number":52,"context_line":"                         \"owner_id\": self.context[\"owner_id\"]}"},{"line_number":53,"context_line":"            )"},{"line_number":54,"context_line":"            for network in self.context[\"tenants\"][tenant_id][\"networks\"]:"},{"line_number":55,"context_line":"                for subnet in network.get(\"subnets\", []):"},{"line_number":56,"context_line":"                    lb \u003d scenario.create_loadbalancer(subnet[\"id\"])"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f79a3b5_00a49c4a","line":53,"range":{"start_line":50,"start_character":12,"end_line":53,"end_character":13},"in_reply_to":"3f79a3b5_89331813","updated":"2018-10-22 14:44:23.000000000","message":"Done","commit_id":"ac68b6ac38fbc96d659290aa4e5563dc09bc0ba1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3189c42ad43061cc0fe6d9d267aa61aa4765d4b7","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        resource_manager.cleanup("},{"line_number":62,"context_line":"            names\u003d[\"octavia.loadbalancers\"],"},{"line_number":63,"context_line":"            users\u003dself.context.get(\"users\", []),"},{"line_number":64,"context_line":"            api_versions\u003dself.context[\"config\"].get(\"api_versions\"),"},{"line_number":65,"context_line":"            superclass\u003doctavia_utils.OctaviaScenario,"},{"line_number":66,"context_line":"            task_id\u003dself.get_owner_id())"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f79a3b5_290f6439","line":64,"range":{"start_line":64,"start_character":12,"end_line":64,"end_character":68},"updated":"2018-09-21 14:56:21.000000000","message":"it is redundant now, just remove this line.","commit_id":"ac68b6ac38fbc96d659290aa4e5563dc09bc0ba1"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"fe4ed6363ad73bc702ad5dbeb4b0dc2f81f49bc5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        resource_manager.cleanup("},{"line_number":62,"context_line":"            names\u003d[\"octavia.loadbalancers\"],"},{"line_number":63,"context_line":"            users\u003dself.context.get(\"users\", []),"},{"line_number":64,"context_line":"            api_versions\u003dself.context[\"config\"].get(\"api_versions\"),"},{"line_number":65,"context_line":"            superclass\u003doctavia_utils.OctaviaScenario,"},{"line_number":66,"context_line":"            task_id\u003dself.get_owner_id())"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f79a3b5_e08de0d4","line":64,"range":{"start_line":64,"start_character":12,"end_line":64,"end_character":68},"in_reply_to":"3f79a3b5_290f6439","updated":"2018-10-22 14:44:23.000000000","message":"Done","commit_id":"ac68b6ac38fbc96d659290aa4e5563dc09bc0ba1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3189c42ad43061cc0fe6d9d267aa61aa4765d4b7","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            names\u003d[\"octavia.loadbalancers\"],"},{"line_number":63,"context_line":"            users\u003dself.context.get(\"users\", []),"},{"line_number":64,"context_line":"            api_versions\u003dself.context[\"config\"].get(\"api_versions\"),"},{"line_number":65,"context_line":"            superclass\u003doctavia_utils.OctaviaScenario,"},{"line_number":66,"context_line":"            task_id\u003dself.get_owner_id())"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f79a3b5_e923acbc","line":65,"range":{"start_line":65,"start_character":12,"end_line":65,"end_character":53},"updated":"2018-09-21 14:56:21.000000000","message":"after fixing the comment for L50, transmit self.__class__ here","commit_id":"ac68b6ac38fbc96d659290aa4e5563dc09bc0ba1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"39d05f77c279891d0ef316e36b3614eb4ee2585e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # Creates a loadbalancer for every subnet created in network context."},{"line_number":48,"context_line":"        for user, tenant_id in (utils.iterate_per_tenants("},{"line_number":49,"context_line":"                self.context.get(\"users\", []))):"},{"line_number":50,"context_line":"            scenario \u003d octavia_utils.OctaviaScenario("},{"line_number":51,"context_line":"                context\u003d{\"user\": user, \"task\": self.context[\"task\"],"},{"line_number":52,"context_line":"                         \"owner_id\": self.context[\"owner_id\"]}"},{"line_number":53,"context_line":"            )"},{"line_number":54,"context_line":"            for network in self.context[\"tenants\"][tenant_id][\"networks\"]:"},{"line_number":55,"context_line":"                for subnet in network.get(\"subnets\", []):"},{"line_number":56,"context_line":"                    lb \u003d scenario.create_loadbalancer(subnet[\"id\"])"}],"source_content_type":"text/x-python","patch_set":45,"id":"3f79a3b5_42581cf8","line":53,"range":{"start_line":50,"start_character":12,"end_line":53,"end_character":13},"updated":"2018-10-09 11:58:10.000000000","message":"the comment from previous patch-set was not addressed for these lines","commit_id":"fe3d176462d27a71bbfdaba9a11abe628799ba4b"}],"rally_openstack/scenarios/octavia/loadbalancers.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\"\"\"Scenarios for Octavia Loadbalancer.\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@validation.add(\"required_services\", services\u003d[consts.Service.NOVA,"},{"line_number":27,"context_line":"                                               consts.Service.NEUTRON])"},{"line_number":28,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", users\u003dTrue)"},{"line_number":29,"context_line":"@validation.add(\"required_contexts\", contexts\u003d(\"network\"))"},{"line_number":30,"context_line":"@scenario.configure(context\u003d{\"cleanup@openstack\": [\"loadbalancer\"]},"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_a62b6c92","line":27,"range":{"start_line":26,"start_character":48,"end_line":27,"end_character":69},"updated":"2018-03-26 14:49:40.000000000","message":"This scenario doesn\u0027t use Nova as like Neutron directly. Use OCTAVIA instead.","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\"\"\"Scenarios for Octavia Loadbalancer.\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@validation.add(\"required_services\", services\u003d[consts.Service.NOVA,"},{"line_number":27,"context_line":"                                               consts.Service.NEUTRON])"},{"line_number":28,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", users\u003dTrue)"},{"line_number":29,"context_line":"@validation.add(\"required_contexts\", contexts\u003d(\"network\"))"},{"line_number":30,"context_line":"@scenario.configure(context\u003d{\"cleanup@openstack\": [\"loadbalancer\"]},"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_63bf7bfb","line":27,"range":{"start_line":26,"start_character":48,"end_line":27,"end_character":69},"in_reply_to":"bf659307_a62b6c92","updated":"2018-03-26 20:31:46.000000000","message":"Done","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":26,"context_line":"@validation.add(\"required_services\", services\u003d[consts.Service.NOVA,"},{"line_number":27,"context_line":"                                               consts.Service.NEUTRON])"},{"line_number":28,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", users\u003dTrue)"},{"line_number":29,"context_line":"@validation.add(\"required_contexts\", contexts\u003d(\"network\"))"},{"line_number":30,"context_line":"@scenario.configure(context\u003d{\"cleanup@openstack\": [\"loadbalancer\"]},"},{"line_number":31,"context_line":"                    name\u003d\"Octavia.create_and_list_loadbalancers\","},{"line_number":32,"context_line":"                    platform\u003d\"openstack\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_6636b406","line":29,"range":{"start_line":29,"start_character":46,"end_line":29,"end_character":57},"updated":"2018-03-26 14:49:40.000000000","message":"it should be an iterator (i.e list or tuple). You tried to use a tuple but forgot to put a comma after \"network\". Use a list instead and such mistakes will not occur.","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":26,"context_line":"@validation.add(\"required_services\", services\u003d[consts.Service.NOVA,"},{"line_number":27,"context_line":"                                               consts.Service.NEUTRON])"},{"line_number":28,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", users\u003dTrue)"},{"line_number":29,"context_line":"@validation.add(\"required_contexts\", contexts\u003d(\"network\"))"},{"line_number":30,"context_line":"@scenario.configure(context\u003d{\"cleanup@openstack\": [\"loadbalancer\"]},"},{"line_number":31,"context_line":"                    name\u003d\"Octavia.create_and_list_loadbalancers\","},{"line_number":32,"context_line":"                    platform\u003d\"openstack\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_433cb792","line":29,"range":{"start_line":29,"start_character":46,"end_line":29,"end_character":57},"in_reply_to":"bf659307_6636b406","updated":"2018-03-26 20:31:46.000000000","message":"Done","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                                               consts.Service.NEUTRON])"},{"line_number":28,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", users\u003dTrue)"},{"line_number":29,"context_line":"@validation.add(\"required_contexts\", contexts\u003d(\"network\"))"},{"line_number":30,"context_line":"@scenario.configure(context\u003d{\"cleanup@openstack\": [\"loadbalancer\"]},"},{"line_number":31,"context_line":"                    name\u003d\"Octavia.create_and_list_loadbalancers\","},{"line_number":32,"context_line":"                    platform\u003d\"openstack\")"},{"line_number":33,"context_line":"class CreateAndListLoadbalancers(utils.OctaviaScenario):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_a919ff79","line":30,"range":{"start_line":30,"start_character":51,"end_line":30,"end_character":65},"updated":"2018-03-26 14:49:40.000000000","message":"This comment should fix you issue while executing a workload locally:\n\n\"cleanup\" thing doesn\u0027t guess anything. You need to add new resource \"octavia.load_balancer\" like https://github.com/openstack/rally-openstack/blob/master/rally_openstack/cleanup/resources.py#L313-L324 (note, an example uses neutronclient)","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                                               consts.Service.NEUTRON])"},{"line_number":28,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", users\u003dTrue)"},{"line_number":29,"context_line":"@validation.add(\"required_contexts\", contexts\u003d(\"network\"))"},{"line_number":30,"context_line":"@scenario.configure(context\u003d{\"cleanup@openstack\": [\"loadbalancer\"]},"},{"line_number":31,"context_line":"                    name\u003d\"Octavia.create_and_list_loadbalancers\","},{"line_number":32,"context_line":"                    platform\u003d\"openstack\")"},{"line_number":33,"context_line":"class CreateAndListLoadbalancers(utils.OctaviaScenario):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_c370c775","line":30,"range":{"start_line":30,"start_character":51,"end_line":30,"end_character":65},"in_reply_to":"bf659307_a919ff79","updated":"2018-03-26 20:31:46.000000000","message":"switched to \"octavia\" and added a class in cleanup/resources","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                    platform\u003d\"openstack\")"},{"line_number":33,"context_line":"class CreateAndListLoadbalancers(utils.OctaviaScenario):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def run(self, lb_create_args\u003dNone):"},{"line_number":36,"context_line":"        \"\"\"Create a loadbalancer per each subnet and then list loadbalancers."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        Measure the \"Octavia loadbalancer list\" command performance."}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_09702ba5","line":35,"range":{"start_line":35,"start_character":18,"end_line":35,"end_character":37},"updated":"2018-03-26 14:49:40.000000000","message":"it is impossible to validate what is here. Can you specify all parameters explicitly?","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"db6c306d09eb6f2ed45efa3d62fce7202119f089","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                    platform\u003d\"openstack\")"},{"line_number":33,"context_line":"class CreateAndListLoadbalancers(utils.OctaviaScenario):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def run(self, lb_create_args\u003dNone):"},{"line_number":36,"context_line":"        \"\"\"Create a loadbalancer per each subnet and then list loadbalancers."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        Measure the \"Octavia loadbalancer list\" command performance."}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_1d8e0cd0","line":35,"range":{"start_line":35,"start_character":18,"end_line":35,"end_character":37},"in_reply_to":"bf659307_03e23f04","updated":"2018-03-27 09:28:43.000000000","message":"Unfortunately, not all of our scenarios are ideal :( current lbaas scenarios are such plugins.\n\nAccepting all options via one argument (lb_create_args in our case) has several disadvantages:\n\n- for just regular users, it is hard to understand what should be transmitted there and which options are required/optional\n- documentation is not user-friendly. We are building plugin reference based on docstrings[*]\n- validation. in case if this dict is transmitted directly to octaviaclient, there will be call to octavia api and validation of request will be done at the API side. Rally tries to validate everything that is possible before launching actual workload is executed. \n-- specifying arguments explicitly allows marking which options are optional/required\n-- validate each argument separately. For example this[2] checks that specific parameter accepts only limited number of options. This[3] checks that specific parameter accepts only a number.\n-- prevent misspelling\n\n\n[1] https://rally.readthedocs.io/en/latest/plugins/plugin_reference.html#cindervolumetypes-create-volume-type-and-encryption-type-scenario\n[2] - https://github.com/openstack/rally-openstack/blob/master/rally_openstack/scenarios/manila/shares.py#L120-L122\n[3] - https://github.com/openstack/rally-openstack/blob/master/rally_openstack/scenarios/nova/servers.py#L495-L496","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                    platform\u003d\"openstack\")"},{"line_number":33,"context_line":"class CreateAndListLoadbalancers(utils.OctaviaScenario):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def run(self, lb_create_args\u003dNone):"},{"line_number":36,"context_line":"        \"\"\"Create a loadbalancer per each subnet and then list loadbalancers."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        Measure the \"Octavia loadbalancer list\" command performance."}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_03e23f04","line":35,"range":{"start_line":35,"start_character":18,"end_line":35,"end_character":37},"in_reply_to":"bf659307_09702ba5","updated":"2018-03-26 20:31:46.000000000","message":"I\u0027m not sure I\u0027m following you on that specific comment.\nI ported the Neutron based scenario so this is actually based on https://github.com/openstack/rally-openstack/blob/fda172a4ce97a57d30eb706731f5ad170971ae1f/rally_openstack/scenarios/neutron/loadbalancer_v2.py#L33\n\nBut if you could please elaborate a bit more I\u0027ll be happy to change it.\nwhat validation is needed here?","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":26025,"name":"chenxu","email":"xuchen1990xx@gmail.com","username":"chenxu"},"change_message_id":"aec7779ddf834ae7bdfcfe0fb29040841714aa39","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                               request options"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        subnets \u003d []"},{"line_number":45,"context_line":"        networks \u003d self.context.get(\"tenant\", {}).get(\"networks\", [])"},{"line_number":46,"context_line":"        for network in networks:"},{"line_number":47,"context_line":"            subnets.extend(network.get(\"subnets\", []))"},{"line_number":48,"context_line":"            for subnet_id in subnets:"}],"source_content_type":"text/x-python","patch_set":23,"id":"bf659307_934d8f9b","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":69},"updated":"2018-04-14 08:53:44.000000000","message":"It is better to use \u0027_get_or_create\u0027 like this https://github.com/openstack/rally/blob/master/rally/plugins/openstack/scenarios/neutron/utils.py#L306.  :)","commit_id":"2ed209b3614453a3163d8184c940f4ae3d926f3a"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"d4c6cb7c2e15003af122293b9b23ec5b9fef90b3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                               request options"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        subnets \u003d []"},{"line_number":45,"context_line":"        networks \u003d self.context.get(\"tenant\", {}).get(\"networks\", [])"},{"line_number":46,"context_line":"        for network in networks:"},{"line_number":47,"context_line":"            subnets.extend(network.get(\"subnets\", []))"},{"line_number":48,"context_line":"            for subnet_id in subnets:"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f6a8fd7_c08eb4cf","line":45,"range":{"start_line":45,"start_character":8,"end_line":45,"end_character":69},"in_reply_to":"bf659307_934d8f9b","updated":"2018-04-15 09:53:13.000000000","message":"thanks for the feedback.\nhow\u0027s what I\u0027m doing here different from https://github.com/openstack/rally-openstack/blob/5d12c4acbe561d067212ab9ccc47ffd2b5fcc5dc/rally_openstack/scenarios/neutron/loadbalancer_v2.py#L45 (which I based on)?","commit_id":"2ed209b3614453a3163d8184c940f4ae3d926f3a"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c2525ce96a3ddd10e34b6c66dfd2a8344435c304","unresolved":false,"context_lines":[{"line_number":29,"context_line":"@scenario.configure(context\u003d{\"cleanup@openstack\": [\"octavia\"]},"},{"line_number":30,"context_line":"                    name\u003d\"Octavia.create_and_list_loadbalancers\","},{"line_number":31,"context_line":"                    platform\u003d\"openstack\")"},{"line_number":32,"context_line":"class CreateAndListLoadbalancers(octaviautils.OctaviaBase):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def run(self):"},{"line_number":35,"context_line":"        \"\"\"Create a loadbalancer per each subnet and then list loadbalancers."}],"source_content_type":"text/x-python","patch_set":41,"id":"5f7c97a3_e4645624","line":32,"range":{"start_line":32,"start_character":5,"end_line":32,"end_character":31},"updated":"2018-05-31 09:30:38.000000000","message":"This scenario doesn\u0027t call list action","commit_id":"22be62bd82e28829beea174e04b1324336f4a520"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3189c42ad43061cc0fe6d9d267aa61aa4765d4b7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        networks \u003d self.context.get(\"tenant\", {}).get(\"networks\", [])"},{"line_number":47,"context_line":"        for network in networks:"},{"line_number":48,"context_line":"            subnets.extend(network.get(\"subnets\", []))"},{"line_number":49,"context_line":"            for subnet_id in subnets:"},{"line_number":50,"context_line":"                lb \u003d self.octavia.load_balancer_create(subnet_id)"},{"line_number":51,"context_line":"                loadbalancers.append(lb)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"3f79a3b5_09ace832","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":37},"updated":"2018-09-21 14:56:21.000000000","message":"in case of several networks, the second cycle of L47 loop will iterate again over subnets from first cycle. \u0027subnets\u0027 variable looks redundant. It should be enough to do something like `for subnet_id in network.get(\"subnets\", [])`","commit_id":"ac68b6ac38fbc96d659290aa4e5563dc09bc0ba1"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"fe4ed6363ad73bc702ad5dbeb4b0dc2f81f49bc5","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        networks \u003d self.context.get(\"tenant\", {}).get(\"networks\", [])"},{"line_number":47,"context_line":"        for network in networks:"},{"line_number":48,"context_line":"            subnets.extend(network.get(\"subnets\", []))"},{"line_number":49,"context_line":"            for subnet_id in subnets:"},{"line_number":50,"context_line":"                lb \u003d self.octavia.load_balancer_create(subnet_id)"},{"line_number":51,"context_line":"                loadbalancers.append(lb)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"3f79a3b5_208438b2","line":49,"range":{"start_line":49,"start_character":12,"end_line":49,"end_character":37},"in_reply_to":"3f79a3b5_09ace832","updated":"2018-10-22 14:44:23.000000000","message":"Done","commit_id":"ac68b6ac38fbc96d659290aa4e5563dc09bc0ba1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"3189c42ad43061cc0fe6d9d267aa61aa4765d4b7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                lb \u003d self.octavia.load_balancer_create(subnet_id)"},{"line_number":51,"context_line":"                loadbalancers.append(lb)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        scenario \u003d octaviautils.OctaviaScenario("},{"line_number":54,"context_line":"            context\u003d{\"user\": self.context[\"user\"],"},{"line_number":55,"context_line":"                     \"task\": self.context[\"task\"],"},{"line_number":56,"context_line":"                     \"owner_id\": self.context[\"owner_id\"]}"},{"line_number":57,"context_line":"        )"},{"line_number":58,"context_line":"        for loadbalancer in loadbalancers:"},{"line_number":59,"context_line":"            scenario._wait_for_loadbalancer_prov_status(loadbalancer)"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f79a3b5_2941a463","line":57,"range":{"start_line":53,"start_character":8,"end_line":57,"end_character":9},"updated":"2018-09-21 14:56:21.000000000","message":"The whole OctaviaScenario class is redundant, move `_wait_for_loadbalancer_prov_status` to OctaviaService.","commit_id":"ac68b6ac38fbc96d659290aa4e5563dc09bc0ba1"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"fe4ed6363ad73bc702ad5dbeb4b0dc2f81f49bc5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                lb \u003d self.octavia.load_balancer_create(subnet_id)"},{"line_number":51,"context_line":"                loadbalancers.append(lb)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        scenario \u003d octaviautils.OctaviaScenario("},{"line_number":54,"context_line":"            context\u003d{\"user\": self.context[\"user\"],"},{"line_number":55,"context_line":"                     \"task\": self.context[\"task\"],"},{"line_number":56,"context_line":"                     \"owner_id\": self.context[\"owner_id\"]}"},{"line_number":57,"context_line":"        )"},{"line_number":58,"context_line":"        for loadbalancer in loadbalancers:"},{"line_number":59,"context_line":"            scenario._wait_for_loadbalancer_prov_status(loadbalancer)"}],"source_content_type":"text/x-python","patch_set":44,"id":"3f79a3b5_809f4c01","line":57,"range":{"start_line":53,"start_character":8,"end_line":57,"end_character":9},"in_reply_to":"3f79a3b5_2941a463","updated":"2018-10-22 14:44:23.000000000","message":"Done","commit_id":"ac68b6ac38fbc96d659290aa4e5563dc09bc0ba1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"39d05f77c279891d0ef316e36b3614eb4ee2585e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        loadbalancers \u003d []"},{"line_number":46,"context_line":"        networks \u003d self.context.get(\"tenant\", {}).get(\"networks\", [])"},{"line_number":47,"context_line":"        for network in networks:"},{"line_number":48,"context_line":"            subnets.extend(network.get(\"subnets\", []))"},{"line_number":49,"context_line":"            for subnet_id in network.get(\"subnets\", []):"},{"line_number":50,"context_line":"                lb \u003d self.octavia.load_balancer_create(subnet_id)"},{"line_number":51,"context_line":"                loadbalancers.append(lb)"}],"source_content_type":"text/x-python","patch_set":45,"id":"3f79a3b5_e245a817","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":54},"updated":"2018-10-09 11:58:10.000000000","message":"this line is redundant as like the whole variable subnets","commit_id":"fe3d176462d27a71bbfdaba9a11abe628799ba4b"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"0add8f822f4b419195c901579725f2f10a022540","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":56,"id":"3f79a3b5_a4af872b","line":64,"updated":"2018-10-24 00:34:57.000000000","message":"Do not see the action of listing loadbalancers.","commit_id":"d23e1195c56ebdf63d0fa2a1beee6f92fd693d06"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"a1c10bb296bf678094a19dfbf73973706762980f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":56,"id":"3f79a3b5_ab066b20","line":64,"in_reply_to":"3f79a3b5_a4af872b","updated":"2018-10-25 14:47:12.000000000","message":"Done","commit_id":"d23e1195c56ebdf63d0fa2a1beee6f92fd693d06"}],"rally_openstack/scenarios/octavia/utils.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"cae8ad4f87154f23a74f43b5792017469c5e3002","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class OctaviaScenario(scenario.OpenStackScenario):"},{"line_number":32,"context_line":"    \"\"\"Base class for Octavia scenarios with basic atomic actions.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def update_loadbalancer_resource(self, lb):"},{"line_number":35,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_2bbca804","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":69},"updated":"2018-03-22 18:12:38.000000000","message":"Such style of making utils is a old-fashion stuff. It has one big issue: All the methods are designed to be called in scenarios, which makes it hard to use in context.\n\nSee how scenarios for Gnocchi were started.\n\nhttps://github.com/openstack/rally/commit/342ca70947cf9102cda2187b0d96b47ab5fc6c07","commit_id":"268c5820aac22514ea04296c2f63f0652bf3686d"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"850ebe7764f0d23ef0497e36827dffb3ed171724","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class OctaviaScenario(scenario.OpenStackScenario):"},{"line_number":32,"context_line":"    \"\"\"Base class for Octavia scenarios with basic atomic actions.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def update_loadbalancer_resource(self, lb):"},{"line_number":35,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_7034464b","line":32,"range":{"start_line":31,"start_character":0,"end_line":32,"end_character":69},"in_reply_to":"df7087c5_2bbca804","updated":"2018-03-24 22:13:50.000000000","message":"let me know if that was your intention: https://review.openstack.org/#/c/554228/6/rally_openstack/services/octavia/main.py","commit_id":"268c5820aac22514ea04296c2f63f0652bf3686d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class OctaviaScenario(scenario.OpenStackScenario):"},{"line_number":32,"context_line":"    \"\"\"Base class for Octavia scenarios with basic atomic actions.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def update_loadbalancer_resource(self, lb):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_e96617ee","line":31,"range":{"start_line":31,"start_character":1,"end_line":31,"end_character":50},"updated":"2018-03-26 14:49:40.000000000","message":"As I mentioned in previous patch-set, such \"utils\" is outdated thing.\n\nYou already proposed a new class which bases on the Service class. It is was should be used in the scenario and in context, like https://github.com/openstack/rally-openstack/blob/master/rally_openstack/scenarios/glance/images.py#L31","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"db6c306d09eb6f2ed45efa3d62fce7202119f089","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class OctaviaScenario(scenario.OpenStackScenario):"},{"line_number":32,"context_line":"    \"\"\"Base class for Octavia scenarios with basic atomic actions.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def update_loadbalancer_resource(self, lb):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_1db4cc34","line":31,"range":{"start_line":31,"start_character":1,"end_line":31,"end_character":50},"in_reply_to":"bf659307_2384235e","updated":"2018-03-27 09:28:43.000000000","message":"yes. use your service class directly","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class OctaviaScenario(scenario.OpenStackScenario):"},{"line_number":32,"context_line":"    \"\"\"Base class for Octavia scenarios with basic atomic actions.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def update_loadbalancer_resource(self, lb):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_2384235e","line":31,"range":{"start_line":31,"start_character":1,"end_line":31,"end_character":50},"in_reply_to":"bf659307_e96617ee","updated":"2018-03-26 20:31:46.000000000","message":"so should I just delete completely?","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"19c16262f5dd86002ca3b00e206da0b2ef279258","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OctaviaiBase(scenario.OpenStackScenario):"},{"line_number":33,"context_line":"    \"\"\"Base class for Octavia scenarios with basic atomic actions.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self, context\u003dNone, admin_clients\u003dNone, clients\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_1050bc0a","line":32,"range":{"start_line":32,"start_character":13,"end_line":32,"end_character":14},"updated":"2018-04-01 18:36:49.000000000","message":"misspelling","commit_id":"6996f3ad0899447173536dc4f9e7c6d75fe036fe"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"7047e95b1e826065afb4c9224cd938066c58262b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class OctaviaiBase(scenario.OpenStackScenario):"},{"line_number":33,"context_line":"    \"\"\"Base class for Octavia scenarios with basic atomic actions.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self, context\u003dNone, admin_clients\u003dNone, clients\u003dNone):"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_90fb6cbf","line":32,"range":{"start_line":32,"start_character":13,"end_line":32,"end_character":14},"in_reply_to":"bf659307_1050bc0a","updated":"2018-04-01 22:10:18.000000000","message":"Done","commit_id":"6996f3ad0899447173536dc4f9e7c6d75fe036fe"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2050b053c0a19c5d1f6a2bb4c1e00e8c841ab359","unresolved":false,"context_lines":[{"line_number":46,"context_line":"class OctaviaScenario(scenario.OpenStackScenario):"},{"line_number":47,"context_line":"    \"\"\"Base class for Octavia scenarios with basic atomic actions.\"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def update_loadbalancer_resource(self, lb):"},{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            new_lb \u003d self.clients(\"octavia\").load_balancer_show(lb[\"id\"])"},{"line_number":52,"context_line":"        except Exception as e:"},{"line_number":53,"context_line":"            if getattr(e, \"status_code\", 400) \u003d\u003d 404:"},{"line_number":54,"context_line":"                raise exceptions.GetResourceNotFound(resource\u003dlb)"},{"line_number":55,"context_line":"            raise exceptions.GetResourceFailure(resource\u003dlb, err\u003de)"},{"line_number":56,"context_line":"        return new_lb"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _wait_for_loadbalancer_prov_status(self, lb, prov_status\u003d\"ACTIVE\"):"},{"line_number":59,"context_line":"        lb \u003d lb[\"loadbalancer\"]"},{"line_number":60,"context_line":"        return utils.wait_for_status("},{"line_number":61,"context_line":"            lb,"},{"line_number":62,"context_line":"            ready_statuses\u003d[prov_status],"},{"line_number":63,"context_line":"            status_attr\u003d\"provisioning_status\","},{"line_number":64,"context_line":"            update_resource\u003dself.update_loadbalancer_resource,"},{"line_number":65,"context_line":"            timeout\u003dCONF.openstack.octavia_create_loadbalancer_timeout,"},{"line_number":66,"context_line":"            check_interval\u003d("},{"line_number":67,"context_line":"                CONF.openstack.octavia_create_loadbalancer_poll_interval)"},{"line_number":68,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":41,"id":"5f7c97a3_24748efd","line":68,"range":{"start_line":49,"start_character":4,"end_line":68,"end_character":9},"updated":"2018-05-31 09:26:59.000000000","message":"put it in the OctaviaService class. \nAlso, you can wrap it with atomic action, so we will count waiting separately and it will be included in the report(currently it is unclear why create operation takes 2.5s but the total time is 220s).\n\n    from rally.task import atomic\n\n    def wait_for_lb_prov_status(self, lb, prov_status):\n        aname \u003d \"octavia.wait_for_lb_%s_prov_status\" % prov_status.lower() \n        with atomic.AtomicTimer(self, aname):\n            return utils.wait_for_status(...)","commit_id":"22be62bd82e28829beea174e04b1324336f4a520"}],"rally_openstack/services/loadbalancer/loadbalancer.py":[{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4b7470ac6a8ba50bf422b03b05e218089c5e5e4b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        :param vip_qos_policy_id: Set QoS policy ID for VIP port"},{"line_number":36,"context_line":"        :param enable: Enable load balancer (default)"},{"line_number":37,"context_line":"        :param disable: Disable load balancer"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        :returns: Return a new load balancer."},{"line_number":40,"context_line":"        \"\"\""},{"line_number":41,"context_line":"        return self._impl.create_load_balanancer("}],"source_content_type":"text/x-python","patch_set":1,"id":"df7087c5_5531e8eb","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":8},"updated":"2018-03-19 13:39:45.000000000","message":"to be cleaned in the next PS","commit_id":"66acf3b48394bb3d4c1e8c9d6db8542e9cc42313"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"9a587bd34cee356b37bdc256603467f387813f9c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        :param vip_qos_policy_id: Set QoS policy ID for VIP port"},{"line_number":36,"context_line":"        :param enable: Enable load balancer (default)"},{"line_number":37,"context_line":"        :param disable: Disable load balancer"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        :returns: Return a new load balancer."},{"line_number":40,"context_line":"        \"\"\""},{"line_number":41,"context_line":"        return self._impl.create_load_balanancer("}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_8bdcef74","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":8},"updated":"2018-03-21 22:19:47.000000000","message":"to be fixed.","commit_id":"d9acb4291a61630a4c5bcdf34e33327964b6a548"}],"rally_openstack/services/loadbalancer/octavia.py":[{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"0add8f822f4b419195c901579725f2f10a022540","unresolved":false,"context_lines":[{"line_number":573,"context_line":"            lb,"},{"line_number":574,"context_line":"            ready_statuses\u003d[prov_status],"},{"line_number":575,"context_line":"            status_attr\u003d\"provisioning_status\","},{"line_number":576,"context_line":"            update_resource\u003dself.update_loadbalancer_resource,"},{"line_number":577,"context_line":"            timeout\u003dCONF.openstack.octavia_create_loadbalancer_timeout,"},{"line_number":578,"context_line":"            check_interval\u003d("},{"line_number":579,"context_line":"                CONF.openstack.octavia_create_loadbalancer_poll_interval)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_248a97bc","line":576,"updated":"2018-10-24 00:34:57.000000000","message":"update_loadbalancer_resource was not defined. Wrote this method at patchset 51","commit_id":"d23e1195c56ebdf63d0fa2a1beee6f92fd693d06"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"a1c10bb296bf678094a19dfbf73973706762980f","unresolved":false,"context_lines":[{"line_number":573,"context_line":"            lb,"},{"line_number":574,"context_line":"            ready_statuses\u003d[prov_status],"},{"line_number":575,"context_line":"            status_attr\u003d\"provisioning_status\","},{"line_number":576,"context_line":"            update_resource\u003dself.update_loadbalancer_resource,"},{"line_number":577,"context_line":"            timeout\u003dCONF.openstack.octavia_create_loadbalancer_timeout,"},{"line_number":578,"context_line":"            check_interval\u003d("},{"line_number":579,"context_line":"                CONF.openstack.octavia_create_loadbalancer_poll_interval)"}],"source_content_type":"text/x-python","patch_set":56,"id":"3f79a3b5_5d00ba00","line":576,"in_reply_to":"3f79a3b5_248a97bc","updated":"2018-10-25 14:47:12.000000000","message":"Done","commit_id":"d23e1195c56ebdf63d0fa2a1beee6f92fd693d06"}],"rally_openstack/services/octavia/main.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from rally.task import service"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class OctaviaService(service.Service):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_list\")"},{"line_number":22,"context_line":"    def load_balancer_list(self, params):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_c9f8f3c5","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":38},"updated":"2018-03-26 14:49:40.000000000","message":"It would be easier if you add only those methods which required for a proposed scenario and context. All others should go when they will become needed","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"db6c306d09eb6f2ed45efa3d62fce7202119f089","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from rally.task import service"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class OctaviaService(service.Service):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_list\")"},{"line_number":22,"context_line":"    def load_balancer_list(self, params):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_8ab89476","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":38},"in_reply_to":"bf659307_c3cc478b","updated":"2018-03-27 09:28:43.000000000","message":"It will be easier to review(less actual code, less tests) if each patch will add only actually used code. + we cannot check not-used methods in our CI","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from rally.task import service"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class OctaviaService(service.Service):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_list\")"},{"line_number":22,"context_line":"    def load_balancer_list(self, params):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_c3cc478b","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":38},"in_reply_to":"bf659307_c9f8f3c5","updated":"2018-03-26 20:31:46.000000000","message":"this page is basically based on the actual octavia python client: https://github.com/openstack/python-octaviaclient/blob/6ec5b302997e50a3b9983ef2b7db641668f4b3dc/octaviaclient/api/v2/octavia.py#L43\n\nI don\u0027t mind removing the functions that we don\u0027t currently use in this scenario, but I do plan to add more scenarios and I think that for people who use really to test locally, it could really help to have it in.","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class OctaviaService(service.Service):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_list\")"},{"line_number":22,"context_line":"    def load_balancer_list(self, params):"},{"line_number":23,"context_line":"        \"\"\"List all load balancers"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        :param params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_097eeb6a","line":22,"range":{"start_line":22,"start_character":33,"end_line":22,"end_character":39},"updated":"2018-03-26 14:49:40.000000000","message":"I\u0027m not an octavia or neutron expert and it is hard to imagine what can be transmitted here. Can you specify available argument explicitly?","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class OctaviaService(service.Service):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_list\")"},{"line_number":22,"context_line":"    def load_balancer_list(self, params):"},{"line_number":23,"context_line":"        \"\"\"List all load balancers"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        :param params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_c3cd275e","line":22,"range":{"start_line":22,"start_character":33,"end_line":22,"end_character":39},"in_reply_to":"bf659307_097eeb6a","updated":"2018-03-26 20:31:46.000000000","message":"as I specified above. this is simply based on the actual client. I can add the positional arguments if that helps.","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        return self._clients.octavia().load_balancer_show(lb_id)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_create\")"},{"line_number":44,"context_line":"    def load_balancer_create(self, params):"},{"line_number":45,"context_line":"        \"\"\"Create a load balancer"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        :param params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_2983af55","line":44,"range":{"start_line":44,"start_character":35,"end_line":44,"end_character":41},"updated":"2018-03-26 14:49:40.000000000","message":"same here and for all other methods.","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        return self._clients.octavia().load_balancer_show(lb_id)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_create\")"},{"line_number":44,"context_line":"    def load_balancer_create(self, params):"},{"line_number":45,"context_line":"        \"\"\"Create a load balancer"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        :param params:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_23066388","line":44,"range":{"start_line":44,"start_character":35,"end_line":44,"end_character":41},"in_reply_to":"bf659307_2983af55","updated":"2018-03-26 20:31:46.000000000","message":"ditto","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return self._clients.octavia().load_balancer_create(params)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_delete\")"},{"line_number":55,"context_line":"    def load_balancer_delete(self, lb_id, params):"},{"line_number":56,"context_line":"        \"\"\"Delete a load balancer"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        :param string lb_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_69ee8723","line":55,"range":{"start_line":55,"start_character":42,"end_line":55,"end_character":48},"updated":"2018-03-26 14:49:40.000000000","message":"I can guess that delete action accepts something like `force` or there are much more options?","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        return self._clients.octavia().load_balancer_create(params)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_delete\")"},{"line_number":55,"context_line":"    def load_balancer_delete(self, lb_id, params):"},{"line_number":56,"context_line":"        \"\"\"Delete a load balancer"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        :param string lb_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_8345efb5","line":55,"range":{"start_line":55,"start_character":42,"end_line":55,"end_character":48},"in_reply_to":"bf659307_69ee8723","updated":"2018-03-26 20:31:46.000000000","message":"kinda, yes.\nwe allow a cascade deletion so a user won\u0027t have to manually delete all the child resources for a given loadbalancer: https://developer.openstack.org/api-ref/load-balancer/v2/#remove-a-load-balancer\n\nshould I specify this here?","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"34a18071d225ffb3d0bf84ccd79dc3981138cac8","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        :return:"},{"line_number":550,"context_line":"            A ``dict`` containing a list of amphorae"},{"line_number":551,"context_line":"        \"\"\""},{"line_number":552,"context_line":"        return self._clients.octavia().amphora_show(kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_e9705775","line":552,"range":{"start_line":552,"start_character":39,"end_line":552,"end_character":51},"updated":"2018-03-26 14:49:40.000000000","message":"it should call list action","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"4059930f3e74aed0ab5d7e82a2a3a82e6f455749","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        :return:"},{"line_number":550,"context_line":"            A ``dict`` containing a list of amphorae"},{"line_number":551,"context_line":"        \"\"\""},{"line_number":552,"context_line":"        return self._clients.octavia().amphora_show(kwargs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_83edeff0","line":552,"range":{"start_line":552,"start_character":39,"end_line":552,"end_character":51},"in_reply_to":"bf659307_e9705775","updated":"2018-03-26 20:31:46.000000000","message":"Done","commit_id":"cee65f8d46df906396f57c0fed222ae366f4025f"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"19c16262f5dd86002ca3b00e206da0b2ef279258","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class OctaviaService(service.Service):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _wait_for_loadbalancer_prov_status(self, lb, prov_status\u003d\"ACTIVE\"):"},{"line_number":29,"context_line":"        lb \u003d lb[\"loadbalancer\"]"},{"line_number":30,"context_line":"        return utils.wait_for_status("},{"line_number":31,"context_line":"            lb,"},{"line_number":32,"context_line":"            ready_statuses\u003d[prov_status],"},{"line_number":33,"context_line":"            status_attr\u003d\"provisioning_status\","},{"line_number":34,"context_line":"            update_resource\u003dself.update_loadbalancer_resource,"},{"line_number":35,"context_line":"            timeout\u003dCONF.openstack.octavia_create_loadbalancer_timeout,"},{"line_number":36,"context_line":"            check_interval\u003d("},{"line_number":37,"context_line":"                CONF.openstack.octavia_create_loadbalancer_poll_interval)"},{"line_number":38,"context_line":"        )"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_list\")"},{"line_number":41,"context_line":"    def load_balancer_list(self, params):"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_d06ec4c7","line":38,"range":{"start_line":29,"start_character":8,"end_line":38,"end_character":9},"updated":"2018-04-01 18:36:49.000000000","message":"you can also wrap this with atomic action. something like:\n\n   with atomic.AtomicTimer(self, \"octavia.wait_for_lb_%s_prov_status\" % prov_status.lower()):\n       lb \u003d lb[\"\"loadbalancer]\n       return ...","commit_id":"6996f3ad0899447173536dc4f9e7c6d75fe036fe"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"d61b4fb9e135ce2faef5d55819b2263afe7a9bbe","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class OctaviaService(service.Service):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _wait_for_loadbalancer_prov_status(self, lb, prov_status\u003d\"ACTIVE\"):"},{"line_number":29,"context_line":"        lb \u003d lb[\"loadbalancer\"]"},{"line_number":30,"context_line":"        return utils.wait_for_status("},{"line_number":31,"context_line":"            lb,"},{"line_number":32,"context_line":"            ready_statuses\u003d[prov_status],"},{"line_number":33,"context_line":"            status_attr\u003d\"provisioning_status\","},{"line_number":34,"context_line":"            update_resource\u003dself.update_loadbalancer_resource,"},{"line_number":35,"context_line":"            timeout\u003dCONF.openstack.octavia_create_loadbalancer_timeout,"},{"line_number":36,"context_line":"            check_interval\u003d("},{"line_number":37,"context_line":"                CONF.openstack.octavia_create_loadbalancer_poll_interval)"},{"line_number":38,"context_line":"        )"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_list\")"},{"line_number":41,"context_line":"    def load_balancer_list(self, params):"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_10099c94","line":38,"range":{"start_line":29,"start_character":8,"end_line":38,"end_character":9},"in_reply_to":"bf659307_500154ae","updated":"2018-04-01 22:11:14.000000000","message":"quoted by mistake. sorry about that.\nwill be handled in the next PS","commit_id":"6996f3ad0899447173536dc4f9e7c6d75fe036fe"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"7047e95b1e826065afb4c9224cd938066c58262b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class OctaviaService(service.Service):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _wait_for_loadbalancer_prov_status(self, lb, prov_status\u003d\"ACTIVE\"):"},{"line_number":29,"context_line":"        lb \u003d lb[\"loadbalancer\"]"},{"line_number":30,"context_line":"        return utils.wait_for_status("},{"line_number":31,"context_line":"            lb,"},{"line_number":32,"context_line":"            ready_statuses\u003d[prov_status],"},{"line_number":33,"context_line":"            status_attr\u003d\"provisioning_status\","},{"line_number":34,"context_line":"            update_resource\u003dself.update_loadbalancer_resource,"},{"line_number":35,"context_line":"            timeout\u003dCONF.openstack.octavia_create_loadbalancer_timeout,"},{"line_number":36,"context_line":"            check_interval\u003d("},{"line_number":37,"context_line":"                CONF.openstack.octavia_create_loadbalancer_poll_interval)"},{"line_number":38,"context_line":"        )"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_list\")"},{"line_number":41,"context_line":"    def load_balancer_list(self, params):"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_500154ae","line":38,"range":{"start_line":29,"start_character":8,"end_line":38,"end_character":9},"in_reply_to":"bf659307_d06ec4c7","updated":"2018-04-01 22:10:18.000000000","message":"\u003e you can also wrap this with atomic action. something like:\n \u003e \n \u003e with atomic.AtomicTimer(self, \"octavia.wait_for_lb_%s_prov_status\"\n \u003e % prov_status.lower()):\n \u003e lb \u003d lb[\"\"loadbalancer]\n \u003e return ...","commit_id":"6996f3ad0899447173536dc4f9e7c6d75fe036fe"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"de3736caaf469192f71032db208b3707b8a9ebb6","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class OctaviaService(service.Service):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_list\")"},{"line_number":29,"context_line":"    def _wait_for_loadbalancer_prov_status(self, lb, prov_status\u003d\"ACTIVE\"):"},{"line_number":30,"context_line":"        lb \u003d lb[\"loadbalancer\"]"},{"line_number":31,"context_line":"        return utils.wait_for_status("}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_d0fec469","line":28,"range":{"start_line":28,"start_character":3,"end_line":28,"end_character":54},"updated":"2018-04-01 22:11:49.000000000","message":"to be fixed","commit_id":"b67e2aaaca2e4ca59221365a0e60bf40e8a1459b"},{"author":{"_account_id":26025,"name":"chenxu","email":"xuchen1990xx@gmail.com","username":"chenxu"},"change_message_id":"aec7779ddf834ae7bdfcfe0fb29040841714aa39","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return self._clients.octavia().load_balancer_show(lb_id)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_create\")"},{"line_number":63,"context_line":"    def load_balancer_create(self, subnet_id, params\u003dNone):"},{"line_number":64,"context_line":"        \"\"\"Create a load balancer"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param subnet_id:"}],"source_content_type":"text/x-python","patch_set":23,"id":"bf659307_733b1be9","line":63,"range":{"start_line":63,"start_character":35,"end_line":63,"end_character":44},"updated":"2018-04-14 08:53:44.000000000","message":"The function sets subnet_id to be required, but actually we just need to specify one of vip_network_id, vip_port_id, or vip_subnet_id.","commit_id":"2ed209b3614453a3163d8184c940f4ae3d926f3a"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"d4c6cb7c2e15003af122293b9b23ec5b9fef90b3","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        return self._clients.octavia().load_balancer_show(lb_id)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    @atomic.action_timer(\"octavia.load_balancer_create\")"},{"line_number":63,"context_line":"    def load_balancer_create(self, subnet_id, params\u003dNone):"},{"line_number":64,"context_line":"        \"\"\"Create a load balancer"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param subnet_id:"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f6a8fd7_206c5007","line":63,"range":{"start_line":63,"start_character":35,"end_line":63,"end_character":44},"in_reply_to":"bf659307_733b1be9","updated":"2018-04-15 09:53:13.000000000","message":"True.\nBut since we don\u0027t really use it, do we really need to incorporate that logic here and complicate things?","commit_id":"2ed209b3614453a3163d8184c940f4ae3d926f3a"}],"samples/tasks/contexts/loadbalancers.json":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"c39f8075df283abaedb5e9258738b1e67acc743a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"                    \"tenants\": 1,"},{"line_number":15,"context_line":"                    \"users_per_tenant\": 2"},{"line_number":16,"context_line":"                },"},{"line_number":17,"context_line":"                \"lbaas\": {"},{"line_number":18,"context_line":"                    \"pool\": {}"},{"line_number":19,"context_line":"                }"},{"line_number":20,"context_line":"            }"}],"source_content_type":"application/json","patch_set":63,"id":"3f79a3b5_5ae13531","line":17,"range":{"start_line":17,"start_character":17,"end_line":17,"end_character":22},"updated":"2018-10-30 12:52:08.000000000","message":"I assume that the current sample is relate to \u0027lbass\u0027 context, but I do not see any new introduced context plugin. Let\u0027s add new samples as soon as new context will be introduced.","commit_id":"14b73a93ca3877fa0aef60d69fe3fd08b0f0cbff"},{"author":{"_account_id":24,"name":"Chuck Short","email":"charles.short@windriver.com","username":"zulcss"},"change_message_id":"65fc1fd37f12b77ec307cfe11bf71f94c7afa321","unresolved":false,"context_lines":[{"line_number":14,"context_line":"                    \"tenants\": 1,"},{"line_number":15,"context_line":"                    \"users_per_tenant\": 2"},{"line_number":16,"context_line":"                },"},{"line_number":17,"context_line":"                \"lbaas\": {"},{"line_number":18,"context_line":"                    \"pool\": {}"},{"line_number":19,"context_line":"                }"},{"line_number":20,"context_line":"            }"}],"source_content_type":"application/json","patch_set":63,"id":"3f79a3b5_9d96e74a","line":17,"range":{"start_line":17,"start_character":17,"end_line":17,"end_character":22},"in_reply_to":"3f79a3b5_5ae13531","updated":"2018-10-30 13:44:13.000000000","message":"Done","commit_id":"14b73a93ca3877fa0aef60d69fe3fd08b0f0cbff"}]}
