)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d46c006e70d3074c870a2f646a2b4c7f24ef1a7b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     vgusev \u003cvgusev@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-12 18:06:31 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add rally test for nova notifications"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added scenario for Ceilometer nova notifications"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da86d52c_da45886f","line":7,"updated":"2015-02-12 21:18:40.000000000","message":"Add Ceilometer scenario for nova notifications \n\nsounds much better","commit_id":"e68814a166f3a812ffed81c479cbc1c95ad93495"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"e6a556e6652f20b476867d7fcb6429e6d9999f0e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     vgusev \u003cvgusev@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-12 18:06:31 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add rally test for nova notifications"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added scenario for Ceilometer nova notifications"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"da86d52c_374bfb60","line":7,"in_reply_to":"da86d52c_da45886f","updated":"2015-02-13 14:48:17.000000000","message":"Done","commit_id":"e68814a166f3a812ffed81c479cbc1c95ad93495"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[Ceilometer] Add CeilometerNovaMetrics.get_nova_notifications scenario"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added scenario to check getting Ceilometer nova notifications"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ic5253b8705ea26748be67901201a21e25308ba1b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"1a6ced46_27dd7671","line":9,"range":{"start_line":9,"start_character":6,"end_line":9,"end_character":31},"updated":"2015-03-23 13:42:33.000000000","message":"benchmark scenario of retriving","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"c6b77a72c67601cb2037e76539e5a16df0267f48","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[Ceilometer] Add CeilometerNovaMetrics.get_nova_notifications scenario"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added scenario to check getting Ceilometer nova notifications"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ic5253b8705ea26748be67901201a21e25308ba1b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"9aa53dc9_55e0d195","line":9,"in_reply_to":"1a6ced46_27dd7671","updated":"2015-04-10 12:29:58.000000000","message":"Done","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"}],"rally-jobs/rally.yaml":[{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"19c92b0e7b40c1661f25db0cd24c1c170c28326c","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    -"},{"line_number":275,"context_line":"      args:"},{"line_number":276,"context_line":"        flavor:"},{"line_number":277,"context_line":"            name: \"m1.nano\""},{"line_number":278,"context_line":"        image:"},{"line_number":279,"context_line":"            name: \"TestVM\""},{"line_number":280,"context_line":"        force_delete: False"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"ba7be1f8_feb390e6","line":277,"updated":"2015-03-02 17:55:03.000000000","message":"Seems like there is no \u0027m1.nano\u0027, that\u0027s why gate-rally-dsvm-rally fails. Please try \u0027m1.tiny\u0027 or \u0027m1.small\u0027 instead","commit_id":"e2df452ef1918c459b10133badb436ed0164aa95"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6e072e5f61dfa58915cb885c465ce39cfb35750d","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    -"},{"line_number":275,"context_line":"      args:"},{"line_number":276,"context_line":"        flavor:"},{"line_number":277,"context_line":"            name: \"m1.nano\""},{"line_number":278,"context_line":"        image:"},{"line_number":279,"context_line":"            name: \"TestVM\""},{"line_number":280,"context_line":"        force_delete: False"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"ba7be1f8_5d8e3b2f","line":277,"in_reply_to":"ba7be1f8_56b7fff4","updated":"2015-03-03 12:41:43.000000000","message":"oh sry\u003d(","commit_id":"e2df452ef1918c459b10133badb436ed0164aa95"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"d919079e013efae874909b2c6dfc86950e173ca1","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    -"},{"line_number":275,"context_line":"      args:"},{"line_number":276,"context_line":"        flavor:"},{"line_number":277,"context_line":"            name: \"m1.nano\""},{"line_number":278,"context_line":"        image:"},{"line_number":279,"context_line":"            name: \"TestVM\""},{"line_number":280,"context_line":"        force_delete: False"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"ba7be1f8_56b7fff4","line":277,"in_reply_to":"ba7be1f8_a21acfc3","updated":"2015-03-03 11:00:47.000000000","message":"Boris, this is a flavor.","commit_id":"e2df452ef1918c459b10133badb436ed0164aa95"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"dda159a0198b528bc9f775e9bea5be6877384b34","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    -"},{"line_number":275,"context_line":"      args:"},{"line_number":276,"context_line":"        flavor:"},{"line_number":277,"context_line":"            name: \"m1.nano\""},{"line_number":278,"context_line":"        image:"},{"line_number":279,"context_line":"            name: \"TestVM\""},{"line_number":280,"context_line":"        force_delete: False"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"ba7be1f8_a21acfc3","line":277,"in_reply_to":"ba7be1f8_feb390e6","updated":"2015-03-02 23:32:30.000000000","message":"2Vitaly: \n\nDon\u0027t listen Mike. use here {{image_name}}","commit_id":"e2df452ef1918c459b10133badb436ed0164aa95"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"178f7b12f8f5d08d85952e66e0d5af72105d578b","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    -"},{"line_number":275,"context_line":"      args:"},{"line_number":276,"context_line":"        flavor:"},{"line_number":277,"context_line":"            name: \"m1.nano\""},{"line_number":278,"context_line":"        image:"},{"line_number":279,"context_line":"            name: \"TestVM\""},{"line_number":280,"context_line":"        force_delete: False"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"9a80dd14_965d0d18","line":277,"in_reply_to":"ba7be1f8_feb390e6","updated":"2015-03-06 13:41:27.000000000","message":"Done","commit_id":"e2df452ef1918c459b10133badb436ed0164aa95"}],"rally/benchmark/scenarios/ceilometer/nova_metrics.py":[{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"249dbd2ad929507113f076500d4b51626265ac3c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def get_nova_notifications(self, image, flavor, force_delete\u003dFalse,"},{"line_number":42,"context_line":"                               auto_assign_nic\u003dFalse, **kwargs):"},{"line_number":43,"context_line":"        instance \u003d self._boot_server(image, flavor, auto_assign_nic,"},{"line_number":44,"context_line":"                                     self._generate_random_name(), **kwargs)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        query \u003d [{\u0027field\u0027: \u0027resource\u0027, \u0027op\u0027: \u0027eq\u0027, \u0027value\u0027: instance.id}]"},{"line_number":47,"context_line":"        self._delete_server(instance, force_delete)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_0fec5c29","line":44,"updated":"2015-02-12 11:35:52.000000000","message":"Please remove the self._generate_random_name() argument, it seems to be useless here","commit_id":"755dce4cc3d88c688863e59ed4ac8dfb57def46c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"5ac3a15d67f6df44d76a7f8baf36c4e4d8604663","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from rally import consts"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NovaMetrics(ceilometerutils.CeilometerScenario, nova_utils.NovaScenario):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    nova_notifications \u003d [\u0027memory\u0027, \u0027vcpus\u0027, \u0027disk.root.size\u0027,"},{"line_number":27,"context_line":"                          \u0027disk.ephemeral.size\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_eb85ce59","line":24,"updated":"2015-02-16 07:31:19.000000000","message":"This class should have a docstring as well","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"cba4943d4389a263ecf28732a86d627fa94c95f2","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from rally import consts"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class NovaMetrics(ceilometerutils.CeilometerScenario, nova_utils.NovaScenario):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    nova_notifications \u003d [\u0027memory\u0027, \u0027vcpus\u0027, \u0027disk.root.size\u0027,"},{"line_number":27,"context_line":"                          \u0027disk.ephemeral.size\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_e30d7b3f","line":24,"in_reply_to":"da86d52c_eb85ce59","updated":"2015-02-25 13:58:35.000000000","message":"Done","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"d0f50d9a342fbed52fb1a0a39e6d952b8d936dea","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                  consts.Service.CEILOMETER)"},{"line_number":34,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":35,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"nova\"]})"},{"line_number":36,"context_line":"    def get_nova_notifications(self, image, flavor, force_delete\u003dFalse,"},{"line_number":37,"context_line":"                               auto_assign_nic\u003dFalse, **kwargs):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        name \u003d self._generate_random_name()"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_106c1308","line":36,"updated":"2015-02-16 07:30:42.000000000","message":"This scenario needs a docstring with descriptions of all parameters including kwargs. Otherwise the unit tests will fail. For example:\n\nhttps://github.com/stackforge/rally/blob/master/rally/benchmark/scenarios/nova/servers.py#L89-L101","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"cba4943d4389a263ecf28732a86d627fa94c95f2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                                  consts.Service.CEILOMETER)"},{"line_number":34,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":35,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"nova\"]})"},{"line_number":36,"context_line":"    def get_nova_notifications(self, image, flavor, force_delete\u003dFalse,"},{"line_number":37,"context_line":"                               auto_assign_nic\u003dFalse, **kwargs):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        name \u003d self._generate_random_name()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_66019904","line":36,"in_reply_to":"da86d52c_106c1308","updated":"2015-02-25 13:58:35.000000000","message":"Done","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"d0f50d9a342fbed52fb1a0a39e6d952b8d936dea","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def get_nova_notifications(self, image, flavor, force_delete\u003dFalse,"},{"line_number":37,"context_line":"                               auto_assign_nic\u003dFalse, **kwargs):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        name \u003d self._generate_random_name()"},{"line_number":40,"context_line":"        instance \u003d self._boot_server(image, flavor, auto_assign_nic, name,"},{"line_number":41,"context_line":"                                     **kwargs)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_30baf76e","line":39,"updated":"2015-02-16 07:30:42.000000000","message":"You just don\u0027t need to pass this argument at all. _boot_server() now generates a random name for new servers automatically: https://github.com/stackforge/rally/blob/master/rally/benchmark/scenarios/nova/utils.py#L98","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"cba4943d4389a263ecf28732a86d627fa94c95f2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def get_nova_notifications(self, image, flavor, force_delete\u003dFalse,"},{"line_number":37,"context_line":"                               auto_assign_nic\u003dFalse, **kwargs):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        name \u003d self._generate_random_name()"},{"line_number":40,"context_line":"        instance \u003d self._boot_server(image, flavor, auto_assign_nic, name,"},{"line_number":41,"context_line":"                                     **kwargs)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_86068d1b","line":39,"in_reply_to":"da86d52c_30baf76e","updated":"2015-02-25 13:58:35.000000000","message":"Done","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"dda159a0198b528bc9f775e9bea5be6877384b34","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :param auto_assign_nic: True if NICs should be assigned"},{"line_number":46,"context_line":"        :param kwargs: other optional parameters to initialize the server"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        instance \u003d self._boot_server(image, flavor, auto_assign_nic, **kwargs)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        query \u003d [{\"field\": \"resource\", \"op\": \"eq\", \"value\": instance.id}]"},{"line_number":51,"context_line":"        self._delete_server(instance, force_delete)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba7be1f8_0280fbf5","line":48,"updated":"2015-03-02 23:32:30.000000000","message":"So do I understand properly that we are interested here in measuring duration between creating VM and getting this notified in ceilometer?","commit_id":"e2df452ef1918c459b10133badb436ed0164aa95"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"178f7b12f8f5d08d85952e66e0d5af72105d578b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :param auto_assign_nic: True if NICs should be assigned"},{"line_number":46,"context_line":"        :param kwargs: other optional parameters to initialize the server"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        instance \u003d self._boot_server(image, flavor, auto_assign_nic, **kwargs)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        query \u003d [{\"field\": \"resource\", \"op\": \"eq\", \"value\": instance.id}]"},{"line_number":51,"context_line":"        self._delete_server(instance, force_delete)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a80dd14_9650add5","line":48,"in_reply_to":"ba7be1f8_0280fbf5","updated":"2015-03-06 13:41:27.000000000","message":"No, first we are create and delete a server, and then check the receipt of the nova notifications.","commit_id":"e2df452ef1918c459b10133badb436ed0164aa95"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0a5b6969026231757721ecfc347282247849eaee","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                                  consts.Service.CEILOMETER)"},{"line_number":36,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":37,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"nova\"]})"},{"line_number":38,"context_line":"    def get_nova_notifications(self, image, flavor, force_delete\u003dFalse,"},{"line_number":39,"context_line":"                               auto_assign_nic\u003dFalse, **kwargs):"},{"line_number":40,"context_line":"        \"\"\"Boot and delete a server and then get nova notifications."},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"3acd31a7_465be254","line":38,"updated":"2015-05-03 09:56:25.000000000","message":"CeliometerNovaMetrics.get_nova_notifications is the full name it repeats 2 times nova and I belive scenario name should be better e.g.: \n\n  CeilometerNovaMetrics.get_server_notifications","commit_id":"1afc97f764c62780b723c9ac437b3fbb4b6144ee"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"e4976e49a7b4b71437d854804be2bf60c3705b39","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                                  consts.Service.CEILOMETER)"},{"line_number":36,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":37,"context_line":"    @base.scenario(context\u003d{\"cleanup\": [\"nova\"]})"},{"line_number":38,"context_line":"    def get_nova_notifications(self, image, flavor, force_delete\u003dFalse,"},{"line_number":39,"context_line":"                               auto_assign_nic\u003dFalse, **kwargs):"},{"line_number":40,"context_line":"        \"\"\"Boot and delete a server and then get nova notifications."},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"1aca2d91_d04c2f72","line":38,"in_reply_to":"3acd31a7_465be254","updated":"2015-05-08 15:31:08.000000000","message":"Done","commit_id":"1afc97f764c62780b723c9ac437b3fbb4b6144ee"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0a5b6969026231757721ecfc347282247849eaee","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :param auto_assign_nic: True if NICs should be assigned"},{"line_number":46,"context_line":"        :param kwargs: other optional parameters to initialize the server"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        instance \u003d self._boot_server(image, flavor, auto_assign_nic, **kwargs)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        query \u003d [{\"field\": \"resource\", \"op\": \"eq\", \"value\": instance.id}]"},{"line_number":51,"context_line":"        self._delete_server(instance, force_delete)"}],"source_content_type":"text/x-python","patch_set":26,"id":"3acd31a7_265a2650","line":48,"updated":"2015-05-03 09:56:25.000000000","message":"I believe this should be implemented in different way. \n\nWe have context that creates VM and it should be used here: \n  https://github.com/openstack/rally/blob/master/rally/benchmark/context/servers.py\n\nSo put validation.required_context(\"servers\") and remove managing VM from this scenario \n\nOr I missed something?","commit_id":"1afc97f764c62780b723c9ac437b3fbb4b6144ee"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"e4976e49a7b4b71437d854804be2bf60c3705b39","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        :param auto_assign_nic: True if NICs should be assigned"},{"line_number":46,"context_line":"        :param kwargs: other optional parameters to initialize the server"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        instance \u003d self._boot_server(image, flavor, auto_assign_nic, **kwargs)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        query \u003d [{\"field\": \"resource\", \"op\": \"eq\", \"value\": instance.id}]"},{"line_number":51,"context_line":"        self._delete_server(instance, force_delete)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1aca2d91_7078bb8f","line":48,"in_reply_to":"3acd31a7_265a2650","updated":"2015-05-08 15:31:08.000000000","message":"Done","commit_id":"1afc97f764c62780b723c9ac437b3fbb4b6144ee"}],"rally/benchmark/scenarios/ceilometer/utils.py":[{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"249dbd2ad929507113f076500d4b51626265ac3c","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                    message\u003d\"After a minute the alarm is not in the expected \""},{"line_number":251,"context_line":"                            \"state\")"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    @base.atomic_action_timer(\"ceilometer.call_until_true\")"},{"line_number":254,"context_line":"    def call_until_true(self, func, duration, sleep_for, arg\u003dNone):"},{"line_number":255,"context_line":"        \"\"\"Call the given function until it returns True (and return True)."},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_ef1388fe","line":253,"updated":"2015-02-12 11:35:52.000000000","message":"Not sure that this method should be an anomic action in this scenario. We usually place such helper methods in rally.benchmark.utils. For example, see https://github.com/stackforge/rally/blob/master/rally/benchmark/utils.py#L87-L123 - it does a pretty similar job","commit_id":"755dce4cc3d88c688863e59ed4ac8dfb57def46c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"249dbd2ad929507113f076500d4b51626265ac3c","unresolved":false,"context_lines":[{"line_number":276,"context_line":"            now \u003d time.time()"},{"line_number":277,"context_line":"        return False"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    @base.atomic_action_timer(\"ceilometer.wait_for_sample_of_metric\")"},{"line_number":280,"context_line":"    def _wait_for_sample_of_metric(self, metric, query\u003dNone, limit\u003d100):"},{"line_number":281,"context_line":"        \"\"\"This method is to wait for sample of metric."},{"line_number":282,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_cf47a4ba","line":279,"updated":"2015-02-12 11:35:52.000000000","message":"It would be nice to incorporate the metric name into the atomic action name. You can do it by using the \"with ...\" syntax instead of the decorator:\n\n    def def _wait_for_sample_of_metric(self, metric, query\u003dNone, limit\u003d100):\n    \"\"\"\n    ...\n    \"\"\"\n    atomic_action \u003d \"ceilometer.wait_for_sample_of_metric_%s\" % metric\n    with base.AtomicAction(self, atomic_action):\n        ...","commit_id":"755dce4cc3d88c688863e59ed4ac8dfb57def46c"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"d0f50d9a342fbed52fb1a0a39e6d952b8d936dea","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        \"\"\""},{"line_number":262,"context_line":"        atomic_action \u003d \"ceilometer.wait_for_sample_of_metric_%s\" % metric"},{"line_number":263,"context_line":"        with base.AtomicAction(self, atomic_action):"},{"line_number":264,"context_line":"            def check_status():"},{"line_number":265,"context_line":"                body \u003d self.clients(\"ceilometer\").samples.list("},{"line_number":266,"context_line":"                    meter_name\u003dmetric, q\u003dquery, limit\u003dlimit)"},{"line_number":267,"context_line":"                if body:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_cbfd6a0a","line":264,"updated":"2015-02-16 07:30:42.000000000","message":"I think this should be moved out of the \"with ...\" statement body, only the actual client calls should be inside","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"cba4943d4389a263ecf28732a86d627fa94c95f2","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        \"\"\""},{"line_number":262,"context_line":"        atomic_action \u003d \"ceilometer.wait_for_sample_of_metric_%s\" % metric"},{"line_number":263,"context_line":"        with base.AtomicAction(self, atomic_action):"},{"line_number":264,"context_line":"            def check_status():"},{"line_number":265,"context_line":"                body \u003d self.clients(\"ceilometer\").samples.list("},{"line_number":266,"context_line":"                    meter_name\u003dmetric, q\u003dquery, limit\u003dlimit)"},{"line_number":267,"context_line":"                if body:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_a61e315d","line":264,"in_reply_to":"da86d52c_cbfd6a0a","updated":"2015-02-25 13:58:35.000000000","message":"Done","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def _wait_for_sample_of_metric(self, metric, query\u003dNone, limit\u003d100,"},{"line_number":240,"context_line":"                                   timeout\u003d600, check_interval\u003d10):"},{"line_number":241,"context_line":"        \"\"\"This method is to wait for sample of metric."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        :param metric: the metric name"},{"line_number":244,"context_line":"        :param query: filter rules for the samples to be returned"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_a8f3f808","line":241,"range":{"start_line":241,"start_character":23,"end_line":241,"end_character":33},"updated":"2015-03-23 13:42:33.000000000","message":"s/is to wait/waits/","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"bb0493ff81684209536d41cbb9f26b8a1abcf6b9","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def _wait_for_sample_of_metric(self, metric, query\u003dNone, limit\u003d100,"},{"line_number":240,"context_line":"                                   timeout\u003d600, check_interval\u003d10):"},{"line_number":241,"context_line":"        \"\"\"This method is to wait for sample of metric."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        :param metric: the metric name"},{"line_number":244,"context_line":"        :param query: filter rules for the samples to be returned"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_953e5926","line":241,"in_reply_to":"1a6ced46_a8f3f808","updated":"2015-04-10 12:28:21.000000000","message":"Done","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        \"\"\"This method is to wait for sample of metric."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        :param metric: the metric name"},{"line_number":244,"context_line":"        :param query: filter rules for the samples to be returned"},{"line_number":245,"context_line":"        :param limit: maximum number of samples to be returned"},{"line_number":246,"context_line":"        :param timeout: the number of seconds for which to attempt a"},{"line_number":247,"context_line":"        successful call of the function"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_683740b1","line":244,"range":{"start_line":244,"start_character":22,"end_line":244,"end_character":34},"updated":"2015-03-23 13:42:33.000000000","message":"s/filter rules/rules filter/","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"bb0493ff81684209536d41cbb9f26b8a1abcf6b9","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        \"\"\"This method is to wait for sample of metric."},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        :param metric: the metric name"},{"line_number":244,"context_line":"        :param query: filter rules for the samples to be returned"},{"line_number":245,"context_line":"        :param limit: maximum number of samples to be returned"},{"line_number":246,"context_line":"        :param timeout: the number of seconds for which to attempt a"},{"line_number":247,"context_line":"        successful call of the function"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_754755bc","line":244,"in_reply_to":"1a6ced46_683740b1","updated":"2015-04-10 12:28:21.000000000","message":"Done","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        :param metric: the metric name"},{"line_number":244,"context_line":"        :param query: filter rules for the samples to be returned"},{"line_number":245,"context_line":"        :param limit: maximum number of samples to be returned"},{"line_number":246,"context_line":"        :param timeout: the number of seconds for which to attempt a"},{"line_number":247,"context_line":"        successful call of the function"},{"line_number":248,"context_line":"        :param check_interval: interval in seconds between the two consecutive"},{"line_number":249,"context_line":"        calls to the function."},{"line_number":250,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_e8e6d015","line":247,"range":{"start_line":246,"start_character":24,"end_line":247,"end_character":39},"updated":"2015-03-23 13:42:33.000000000","message":"\u0027number of seconds to wait saccess on query","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"bb0493ff81684209536d41cbb9f26b8a1abcf6b9","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        :param query: filter rules for the samples to be returned"},{"line_number":245,"context_line":"        :param limit: maximum number of samples to be returned"},{"line_number":246,"context_line":"        :param timeout: the number of seconds for which to attempt a"},{"line_number":247,"context_line":"        successful call of the function"},{"line_number":248,"context_line":"        :param check_interval: interval in seconds between the two consecutive"},{"line_number":249,"context_line":"        calls to the function."},{"line_number":250,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_f5092585","line":247,"in_reply_to":"1a6ced46_e8e6d015","updated":"2015-04-10 12:28:21.000000000","message":"Done","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        :param limit: maximum number of samples to be returned"},{"line_number":246,"context_line":"        :param timeout: the number of seconds for which to attempt a"},{"line_number":247,"context_line":"        successful call of the function"},{"line_number":248,"context_line":"        :param check_interval: interval in seconds between the two consecutive"},{"line_number":249,"context_line":"        calls to the function."},{"line_number":250,"context_line":"        \"\"\""},{"line_number":251,"context_line":"        def check_status():"},{"line_number":252,"context_line":"            body \u003d self.clients(\"ceilometer\").samples.list("}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_a3587bfb","line":249,"range":{"start_line":248,"start_character":31,"end_line":249,"end_character":30},"updated":"2015-03-23 13:42:33.000000000","message":"interval between queries","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"bb0493ff81684209536d41cbb9f26b8a1abcf6b9","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        :param timeout: the number of seconds for which to attempt a"},{"line_number":247,"context_line":"        successful call of the function"},{"line_number":248,"context_line":"        :param check_interval: interval in seconds between the two consecutive"},{"line_number":249,"context_line":"        calls to the function."},{"line_number":250,"context_line":"        \"\"\""},{"line_number":251,"context_line":"        def check_status():"},{"line_number":252,"context_line":"            body \u003d self.clients(\"ceilometer\").samples.list("}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_d50e218b","line":249,"in_reply_to":"1a6ced46_a3587bfb","updated":"2015-04-10 12:28:21.000000000","message":"Done","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                return self.clients(\"ceilometer\").samples.list("},{"line_number":262,"context_line":"                    meter_name\u003dmetric, q\u003dquery, limit\u003dlimit)"},{"line_number":263,"context_line":"            else:"},{"line_number":264,"context_line":"                msg \u003d (\"Timed out waiting to become sample for metric: \""},{"line_number":265,"context_line":"                       \"{metric} with query: {query}\".format(metric\u003dmetric,"},{"line_number":266,"context_line":"                                                             query\u003dquery))"},{"line_number":267,"context_line":"                raise exceptions.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_08932ca4","line":264,"range":{"start_line":264,"start_character":45,"end_line":264,"end_character":51},"updated":"2015-03-23 13:42:33.000000000","message":"something is wrong here. Do you mean \"fetch\" or \"get\"?","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"bb0493ff81684209536d41cbb9f26b8a1abcf6b9","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                return self.clients(\"ceilometer\").samples.list("},{"line_number":262,"context_line":"                    meter_name\u003dmetric, q\u003dquery, limit\u003dlimit)"},{"line_number":263,"context_line":"            else:"},{"line_number":264,"context_line":"                msg \u003d (\"Timed out waiting to become sample for metric: \""},{"line_number":265,"context_line":"                       \"{metric} with query: {query}\".format(metric\u003dmetric,"},{"line_number":266,"context_line":"                                                             query\u003dquery))"},{"line_number":267,"context_line":"                raise exceptions.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_9525390a","line":264,"in_reply_to":"1a6ced46_08932ca4","updated":"2015-04-10 12:28:21.000000000","message":"Done","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @base.atomic_action_timer(\"ceilometer.wait_metrics\")"},{"line_number":270,"context_line":"    def _wait_metrics(self, metric_list, query):"},{"line_number":271,"context_line":"        \"\"\"This method is to wait for metrics from metric list."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        :param metric_list: the list of the metrics"},{"line_number":274,"context_line":"        :param query: filter rules for the metrics to be returned"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_a8ca189f","line":271,"range":{"start_line":271,"start_character":23,"end_line":271,"end_character":33},"updated":"2015-03-23 13:42:33.000000000","message":"s/is to wait/waits/","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"bb0493ff81684209536d41cbb9f26b8a1abcf6b9","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    @base.atomic_action_timer(\"ceilometer.wait_metrics\")"},{"line_number":270,"context_line":"    def _wait_metrics(self, metric_list, query):"},{"line_number":271,"context_line":"        \"\"\"This method is to wait for metrics from metric list."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        :param metric_list: the list of the metrics"},{"line_number":274,"context_line":"        :param query: filter rules for the metrics to be returned"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_751e35bc","line":271,"in_reply_to":"1a6ced46_a8ca189f","updated":"2015-04-10 12:28:21.000000000","message":"Done","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\"This method is to wait for metrics from metric list."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        :param metric_list: the list of the metrics"},{"line_number":274,"context_line":"        :param query: filter rules for the metrics to be returned"},{"line_number":275,"context_line":"        \"\"\""},{"line_number":276,"context_line":"        for metric in metric_list:"},{"line_number":277,"context_line":"            self._wait_for_sample_of_metric(metric, query)"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_e8a25099","line":274,"range":{"start_line":274,"start_character":22,"end_line":274,"end_character":34},"updated":"2015-03-23 13:42:33.000000000","message":"rules filter","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"bb0493ff81684209536d41cbb9f26b8a1abcf6b9","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\"This method is to wait for metrics from metric list."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        :param metric_list: the list of the metrics"},{"line_number":274,"context_line":"        :param query: filter rules for the metrics to be returned"},{"line_number":275,"context_line":"        \"\"\""},{"line_number":276,"context_line":"        for metric in metric_list:"},{"line_number":277,"context_line":"            self._wait_for_sample_of_metric(metric, query)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_551b31ca","line":274,"in_reply_to":"1a6ced46_e8a25099","updated":"2015-04-10 12:28:21.000000000","message":"Done","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"}],"rally/benchmark/utils.py":[{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"d0f50d9a342fbed52fb1a0a39e6d952b8d936dea","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    return False"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"def call_until_true(self, func, duration, sleep_for, arg\u003dNone):"},{"line_number":180,"context_line":"    \"\"\"Call the given function until it returns True (and return True)."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    Otherwise after the specified duration (in seconds) the function"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_6b3c7ec0","line":179,"updated":"2015-02-16 07:30:42.000000000","message":"Let\u0027s support functions with more than one argument, then it will be possible to reuse this method. You should rename \"arg\" to \"args\" and make it a tuple, so line 195 will become:\n\n    if func(*args):\n         ...","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"cba4943d4389a263ecf28732a86d627fa94c95f2","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    return False"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"def call_until_true(self, func, duration, sleep_for, arg\u003dNone):"},{"line_number":180,"context_line":"    \"\"\"Call the given function until it returns True (and return True)."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    Otherwise after the specified duration (in seconds) the function"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_a65551fb","line":179,"in_reply_to":"da86d52c_6b3c7ec0","updated":"2015-02-25 13:58:35.000000000","message":"Done","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"d0f50d9a342fbed52fb1a0a39e6d952b8d936dea","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    :param duration: The number of seconds for which to attempt a"},{"line_number":187,"context_line":"    successful call of the function."},{"line_number":188,"context_line":"    :param sleep_for: The number of seconds to sleep after an unsuccessful"},{"line_number":189,"context_line":"    invocation of the function."},{"line_number":190,"context_line":"    \"\"\""},{"line_number":191,"context_line":"    now \u003d time.time()"},{"line_number":192,"context_line":"    timeout \u003d now + duration"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_6b0e3e34","line":189,"updated":"2015-02-16 07:30:42.000000000","message":"Please add a description for the \"args\" parameter:\n\n    :param args: tuple, optional arguments to be passed to the function","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"cba4943d4389a263ecf28732a86d627fa94c95f2","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    :param duration: The number of seconds for which to attempt a"},{"line_number":187,"context_line":"    successful call of the function."},{"line_number":188,"context_line":"    :param sleep_for: The number of seconds to sleep after an unsuccessful"},{"line_number":189,"context_line":"    invocation of the function."},{"line_number":190,"context_line":"    \"\"\""},{"line_number":191,"context_line":"    now \u003d time.time()"},{"line_number":192,"context_line":"    timeout \u003d now + duration"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_26496160","line":189,"in_reply_to":"da86d52c_6b0e3e34","updated":"2015-02-25 13:58:35.000000000","message":"Done","commit_id":"2c806301507a206143f7df776b7c83ae05784ed3"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"9ed278fc7206929b960b7bc3e8d4b49aa0b17dde","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    return False."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    :param func: A zero argument callable that returns True on success."},{"line_number":184,"context_line":"    :param duration: The number of seconds for which to attempt a"},{"line_number":185,"context_line":"    successful call of the function."},{"line_number":186,"context_line":"    :param sleep_for: The number of seconds to sleep after an unsuccessful"},{"line_number":187,"context_line":"    invocation of the function."}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_065f52e6","line":184,"updated":"2015-03-02 11:09:59.000000000","message":"A more suitable for this parameter is \u0027timeout\u0027 IMO (see a similar parameter in the wait_for() method)","commit_id":"0bae1a7c0ecb67f360d07d459fbd5e55c3ea4daf"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"8443d2d92974cd8c1ce22a12a85615cbe78a6609","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    return False."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    :param func: A zero argument callable that returns True on success."},{"line_number":184,"context_line":"    :param duration: The number of seconds for which to attempt a"},{"line_number":185,"context_line":"    successful call of the function."},{"line_number":186,"context_line":"    :param sleep_for: The number of seconds to sleep after an unsuccessful"},{"line_number":187,"context_line":"    invocation of the function."}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_64355cda","line":184,"in_reply_to":"ba7be1f8_065f52e6","updated":"2015-03-02 15:17:25.000000000","message":"Done","commit_id":"0bae1a7c0ecb67f360d07d459fbd5e55c3ea4daf"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"9ed278fc7206929b960b7bc3e8d4b49aa0b17dde","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    :param func: A zero argument callable that returns True on success."},{"line_number":184,"context_line":"    :param duration: The number of seconds for which to attempt a"},{"line_number":185,"context_line":"    successful call of the function."},{"line_number":186,"context_line":"    :param sleep_for: The number of seconds to sleep after an unsuccessful"},{"line_number":187,"context_line":"    invocation of the function."},{"line_number":188,"context_line":"    :param args: tuple, optional arguments to be passed to the function"},{"line_number":189,"context_line":"    :param kwargs: dictionary, optional arguments to be passed to the function"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_c690da97","line":186,"updated":"2015-03-02 11:09:59.000000000","message":"Perhaps a better name for this would be \u0027check_interval\u0027 (again, to be consistent with wait_for())","commit_id":"0bae1a7c0ecb67f360d07d459fbd5e55c3ea4daf"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"8443d2d92974cd8c1ce22a12a85615cbe78a6609","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    :param func: A zero argument callable that returns True on success."},{"line_number":184,"context_line":"    :param duration: The number of seconds for which to attempt a"},{"line_number":185,"context_line":"    successful call of the function."},{"line_number":186,"context_line":"    :param sleep_for: The number of seconds to sleep after an unsuccessful"},{"line_number":187,"context_line":"    invocation of the function."},{"line_number":188,"context_line":"    :param args: tuple, optional arguments to be passed to the function"},{"line_number":189,"context_line":"    :param kwargs: dictionary, optional arguments to be passed to the function"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_843410df","line":186,"in_reply_to":"ba7be1f8_c690da97","updated":"2015-03-02 15:17:25.000000000","message":"Done","commit_id":"0bae1a7c0ecb67f360d07d459fbd5e55c3ea4daf"},{"author":{"_account_id":8507,"name":"Mikhail Dubov","email":"mdubov@mirantis.com","username":"msdubov"},"change_message_id":"9ed278fc7206929b960b7bc3e8d4b49aa0b17dde","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        LOG.debug(\"Sleeping for %d seconds\", sleep_for)"},{"line_number":197,"context_line":"        time.sleep(sleep_for)"},{"line_number":198,"context_line":"        now \u003d time.time()"},{"line_number":199,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_060672ce","line":199,"updated":"2015-03-02 11:09:59.000000000","message":"Could you please add before this line something like this:\n\n    LOG.debug(\"Timeout exceeded (%d seconds). The function did not return True\" % timeout)","commit_id":"0bae1a7c0ecb67f360d07d459fbd5e55c3ea4daf"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"8443d2d92974cd8c1ce22a12a85615cbe78a6609","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        LOG.debug(\"Sleeping for %d seconds\", sleep_for)"},{"line_number":197,"context_line":"        time.sleep(sleep_for)"},{"line_number":198,"context_line":"        now \u003d time.time()"},{"line_number":199,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_e4506c0c","line":199,"in_reply_to":"ba7be1f8_060672ce","updated":"2015-03-02 15:17:25.000000000","message":"Done","commit_id":"0bae1a7c0ecb67f360d07d459fbd5e55c3ea4daf"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"def call_until_true(func, timeout, check_interval, *args, **kwargs):"},{"line_number":180,"context_line":"    \"\"\"Call the given function until it returns True (and return True)."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    Otherwise after the specified duration (in seconds) the function"},{"line_number":183,"context_line":"    return False."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    :param func: A zero argument callable that returns True on success."},{"line_number":186,"context_line":"    :param timeout: The number of seconds for which to attempt a"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_a8d138cf","line":183,"range":{"start_line":180,"start_character":0,"end_line":183,"end_character":17},"updated":"2015-03-23 13:42:33.000000000","message":"\"\"\"Call the given function until it returns True (and return True).\n\n    Otherwise after the specified duration (in seconds) the function\n    return False.","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"bb0493ff81684209536d41cbb9f26b8a1abcf6b9","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    \"\"\"Call the given function until it returns True (and return True)."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    Otherwise after the specified duration (in seconds) the function"},{"line_number":183,"context_line":"    return False."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    :param func: A zero argument callable that returns True on success."},{"line_number":186,"context_line":"    :param timeout: The number of seconds for which to attempt a"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_158fe92a","line":183,"in_reply_to":"1a6ced46_a8d138cf","updated":"2015-04-10 12:28:21.000000000","message":"What do you mean?","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    Otherwise after the specified duration (in seconds) the function"},{"line_number":183,"context_line":"    return False."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    :param func: A zero argument callable that returns True on success."},{"line_number":186,"context_line":"    :param timeout: The number of seconds for which to attempt a"},{"line_number":187,"context_line":"    successful call of the function."},{"line_number":188,"context_line":"    :param check_interval: Interval in seconds between the two consecutive"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_832b7f81","line":185,"range":{"start_line":185,"start_character":17,"end_line":185,"end_character":32},"updated":"2015-03-23 13:42:33.000000000","message":"Looks like you should remove it","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":14691,"name":"Vitaly Gusev","email":"vgusev@mirantis.com","username":"vgusev"},"change_message_id":"bb0493ff81684209536d41cbb9f26b8a1abcf6b9","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    Otherwise after the specified duration (in seconds) the function"},{"line_number":183,"context_line":"    return False."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    :param func: A zero argument callable that returns True on success."},{"line_number":186,"context_line":"    :param timeout: The number of seconds for which to attempt a"},{"line_number":187,"context_line":"    successful call of the function."},{"line_number":188,"context_line":"    :param check_interval: Interval in seconds between the two consecutive"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_b5d39d03","line":185,"in_reply_to":"1a6ced46_832b7f81","updated":"2015-04-10 12:28:21.000000000","message":"I think that removing is not necessary","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    :param func: A zero argument callable that returns True on success."},{"line_number":186,"context_line":"    :param timeout: The number of seconds for which to attempt a"},{"line_number":187,"context_line":"    successful call of the function."},{"line_number":188,"context_line":"    :param check_interval: Interval in seconds between the two consecutive"},{"line_number":189,"context_line":"    calls to the function."},{"line_number":190,"context_line":"    :param args: tuple, optional arguments to be passed to the function"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_8868fcf6","line":187,"range":{"start_line":187,"start_character":27,"end_line":187,"end_character":35},"updated":"2015-03-23 13:42:33.000000000","message":"given callable","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"addc06ea4e47a108138f7b42a84f1118ee7d1030","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    :param timeout: The number of seconds for which to attempt a"},{"line_number":187,"context_line":"    successful call of the function."},{"line_number":188,"context_line":"    :param check_interval: Interval in seconds between the two consecutive"},{"line_number":189,"context_line":"    calls to the function."},{"line_number":190,"context_line":"    :param args: tuple, optional arguments to be passed to the function"},{"line_number":191,"context_line":"    :param kwargs: dictionary, optional arguments to be passed to the function"},{"line_number":192,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6ced46_e876d0d7","line":189,"range":{"start_line":189,"start_character":17,"end_line":189,"end_character":25},"updated":"2015-03-23 13:42:33.000000000","message":"callable","commit_id":"fded45f60e268e59faaccf1d82600b2f423f5b14"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c163dfb158b42840681ec6fc551e8d52a0a85f54","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    return False"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"def call_until_true(func, timeout, check_interval, *args, **kwargs):"},{"line_number":180,"context_line":"    \"\"\"Call the given function until it returns True (and return True)."},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    Otherwise after the specified duration (in seconds) the function"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a016987_efac83ee","line":179,"updated":"2015-06-01 07:55:19.000000000","message":"You should use wait_for method.","commit_id":"28b75f8f2f80dde912fac067bba1ee5deff51b51"},{"author":{"_account_id":8367,"name":"Arx Cruz","email":"arxcruz@redhat.com","username":"arxcruz"},"change_message_id":"e4187968296a1e6640718d870f091077e1dd1cd7","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        LOG.debug(\"Sleeping for %d seconds\", check_interval)"},{"line_number":199,"context_line":"        time.sleep(check_interval)"},{"line_number":200,"context_line":"        now \u003d time.time()"},{"line_number":201,"context_line":"    LOG.debug(\"Timeout exceeded (%d seconds). \""},{"line_number":202,"context_line":"              \"The function did not return True\" % timeout)"},{"line_number":203,"context_line":"    return False"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a016987_ac19f9d2","line":201,"updated":"2015-06-01 07:46:18.000000000","message":"Should use _(\"message\") for internationalization","commit_id":"28b75f8f2f80dde912fac067bba1ee5deff51b51"}],"rally/plugins/openstack/scenarios/ceilometer/nova_metrics.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"ba64984fef0740566696ec784be243560eec81a7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def get_server_notifications(self):"},{"line_number":37,"context_line":"        \"\"\"Boot and delete a server and then get nova notifications.\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        servers \u003d self.context[\"tenant\"].get(\"servers\", [])"},{"line_number":40,"context_line":"        if not servers:"},{"line_number":41,"context_line":"            msg \u003d (\"No servers found for tenant: %s\""},{"line_number":42,"context_line":"                   % self.context[\"tenant\"].get(\"name\"))"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a016987_d644bb47","line":39,"updated":"2015-06-01 12:36:48.000000000","message":"https://github.com/openstack/rally/blob/master/rally/plugins/openstack/context/servers.py#L103 As I see here must to be one more key - tenant_id","commit_id":"28b75f8f2f80dde912fac067bba1ee5deff51b51"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"ba64984fef0740566696ec784be243560eec81a7","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        servers \u003d self.context[\"tenant\"].get(\"servers\", [])"},{"line_number":40,"context_line":"        if not servers:"},{"line_number":41,"context_line":"            msg \u003d (\"No servers found for tenant: %s\""},{"line_number":42,"context_line":"                   % self.context[\"tenant\"].get(\"name\"))"},{"line_number":43,"context_line":"            raise exceptions.NotFoundException(message\u003dmsg)"},{"line_number":44,"context_line":"        for server_id in servers:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a016987_d3196dd2","line":41,"updated":"2015-06-01 12:36:48.000000000","message":"Maybe need to add internationalization","commit_id":"28b75f8f2f80dde912fac067bba1ee5deff51b51"}],"rally/plugins/openstack/scenarios/ceilometer/utils.py":[{"author":{"_account_id":8367,"name":"Arx Cruz","email":"arxcruz@redhat.com","username":"arxcruz"},"change_message_id":"e4187968296a1e6640718d870f091077e1dd1cd7","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                return self.clients(\"ceilometer\").samples.list("},{"line_number":256,"context_line":"                    meter_name\u003dmetric, q\u003dquery, limit\u003dlimit)"},{"line_number":257,"context_line":"            else:"},{"line_number":258,"context_line":"                msg \u003d (\"Timed out waiting to get sample for metric: \""},{"line_number":259,"context_line":"                       \"{metric} with query: {query}\".format(metric\u003dmetric,"},{"line_number":260,"context_line":"                                                             query\u003dquery))"},{"line_number":261,"context_line":"                raise exceptions.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a016987_cc7555fa","line":258,"updated":"2015-06-01 07:46:18.000000000","message":"Same here _(\"message\")","commit_id":"28b75f8f2f80dde912fac067bba1ee5deff51b51"}]}
