)]}'
{"tempest/scenario/test_aggregates_basic_ops.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7395f7fcbc73deaff4a26a5f9c188b2336d146f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"da36d5c6_54f264d3","updated":"2017-02-21 19:08:58.000000000","message":"I will suggest to keep this code as it is and lets put the required code in another class also.\nWe should not add more inheritance level in scenario classes as it will make hard to debug. We are in progress of refactoring the scenario framework to reduced the inheritance level.","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"da36d5c6_4f354ff5","in_reply_to":"da36d5c6_54f264d3","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"}],"tempest/scenario/test_aggregates_multi_tenancy_isolation.py":[{"author":{"_account_id":16437,"name":"Anna Babich","email":"anna.v.babich@gmail.com","username":"ababich"},"change_message_id":"b7fb84bf083c22be3bc0849889240cd3d9cdc208","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        aggregate_for_tenant_2 \u003d \\"},{"line_number":90,"context_line":"            self._create_aggregate_with_tenant_filter(use_default_tenant\u003dFalse)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # Split all compute hosts between the two aggregates:"},{"line_number":93,"context_line":"        # one compute belongs to the first,"},{"line_number":94,"context_line":"        # the rest of the computes belong the second aggregate"},{"line_number":95,"context_line":"        hosts \u003d self._get_all_host_names()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_1857eb26","line":92,"updated":"2016-09-30 16:00:26.000000000","message":"If you expect to use multiple computes in your scenario, you should add a check to @skip_checks that your environment meets this requirement, and the test will be skipped if not. Like it\u0027s done for live-migration tests.","commit_id":"75c5ce0d82cc3d81585526da1eee94f114b2ec47"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"655a19bebaa283c4caa12380508a8d459d07e3e2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":41,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":42,"context_line":"            raise cls.skipException("},{"line_number":43,"context_line":"                \"At least two computes are required to run multinode tests.\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def setup_credentials(cls):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_d90cee44","line":43,"range":{"start_line":43,"start_character":30,"end_line":43,"end_character":38},"updated":"2017-01-03 08:36:30.000000000","message":"compute nodes","commit_id":"3f558c5cb303d5ea619e9ab2b0bfb335fe99f4db"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"af63539df84d1a0d0bf8e3b5918a1d4a72e2a3d7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":41,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":42,"context_line":"            raise cls.skipException("},{"line_number":43,"context_line":"                \"At least two computes are required to run multinode tests.\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def setup_credentials(cls):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_2a759af8","line":43,"range":{"start_line":43,"start_character":30,"end_line":43,"end_character":38},"in_reply_to":"ba5201f7_d90cee44","updated":"2017-01-03 10:12:06.000000000","message":"Done","commit_id":"3f558c5cb303d5ea619e9ab2b0bfb335fe99f4db"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"655a19bebaa283c4caa12380508a8d459d07e3e2","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            raise cls.skipException("},{"line_number":43,"context_line":"                \"At least two computes are required to run multinode tests.\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def setup_credentials(cls):"},{"line_number":47,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).setup_credentials()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _create_tenant(self):"},{"line_number":50,"context_line":"        name \u003d data_utils.rand_name(\u0027aggregate\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_1907561d","line":47,"range":{"start_line":45,"start_character":0,"end_line":47,"end_character":74},"updated":"2017-01-03 08:36:30.000000000","message":"can be removed","commit_id":"3f558c5cb303d5ea619e9ab2b0bfb335fe99f4db"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"af63539df84d1a0d0bf8e3b5918a1d4a72e2a3d7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            raise cls.skipException("},{"line_number":43,"context_line":"                \"At least two computes are required to run multinode tests.\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def setup_credentials(cls):"},{"line_number":47,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).setup_credentials()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _create_tenant(self):"},{"line_number":50,"context_line":"        name \u003d data_utils.rand_name(\u0027aggregate\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_4a601e36","line":47,"range":{"start_line":45,"start_character":0,"end_line":47,"end_character":74},"in_reply_to":"ba5201f7_1907561d","updated":"2017-01-03 10:12:06.000000000","message":"Done","commit_id":"3f558c5cb303d5ea619e9ab2b0bfb335fe99f4db"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"655a19bebaa283c4caa12380508a8d459d07e3e2","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                      metadata\u003dmetadata)"},{"line_number":84,"context_line":"        return aggregate"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":87,"context_line":"    @test.idempotent_id(\u0027a795e02f-900b-4811-aa43-24420547531f\u0027)"},{"line_number":88,"context_line":"    @test.services(\u0027compute\u0027)"},{"line_number":89,"context_line":"    def test_aggregate_one_valid_host(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_74522715","line":86,"range":{"start_line":86,"start_character":4,"end_line":86,"end_character":28},"updated":"2017-01-03 08:36:30.000000000","message":"testcases in this file shouldn\u0027t be of type \u0027smoke\u0027?","commit_id":"3f558c5cb303d5ea619e9ab2b0bfb335fe99f4db"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"af63539df84d1a0d0bf8e3b5918a1d4a72e2a3d7","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                                      metadata\u003dmetadata)"},{"line_number":84,"context_line":"        return aggregate"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":87,"context_line":"    @test.idempotent_id(\u0027a795e02f-900b-4811-aa43-24420547531f\u0027)"},{"line_number":88,"context_line":"    @test.services(\u0027compute\u0027)"},{"line_number":89,"context_line":"    def test_aggregate_one_valid_host(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_2a4cbac6","line":86,"range":{"start_line":86,"start_character":4,"end_line":86,"end_character":28},"in_reply_to":"ba5201f7_74522715","updated":"2017-01-03 10:12:06.000000000","message":"Do You mean that these test are smoke tests by default?","commit_id":"3f558c5cb303d5ea619e9ab2b0bfb335fe99f4db"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"655a19bebaa283c4caa12380508a8d459d07e3e2","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            self._add_host(aggregate_for_tenant_2[\u0027id\u0027], host)"},{"line_number":163,"context_line":"        self._check_aggregate_details(aggregate_for_tenant_2, hosts\u003dhosts)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        server \u003d self.create_server()"},{"line_number":166,"context_line":"        host \u003d self._get_instance_hostname(server[\u0027id\u0027])"},{"line_number":167,"context_line":"        self.assertRaises(exceptions.BuildErrorException,"},{"line_number":168,"context_line":"                          waiters.wait_for_server_status,"},{"line_number":169,"context_line":"                          self.servers_client, server[\u0027id\u0027], \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_d4967393","line":169,"range":{"start_line":165,"start_character":0,"end_line":169,"end_character":70},"updated":"2017-01-03 08:36:30.000000000","message":"can be replaced by:\n        self.assertRaises(exceptions.BuildErrorException,\n                          self.create_server,\n                          wait_until\u003d\u0027ACTIVE\u0027)","commit_id":"3f558c5cb303d5ea619e9ab2b0bfb335fe99f4db"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"af63539df84d1a0d0bf8e3b5918a1d4a72e2a3d7","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            self._add_host(aggregate_for_tenant_2[\u0027id\u0027], host)"},{"line_number":163,"context_line":"        self._check_aggregate_details(aggregate_for_tenant_2, hosts\u003dhosts)"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        server \u003d self.create_server()"},{"line_number":166,"context_line":"        host \u003d self._get_instance_hostname(server[\u0027id\u0027])"},{"line_number":167,"context_line":"        self.assertRaises(exceptions.BuildErrorException,"},{"line_number":168,"context_line":"                          waiters.wait_for_server_status,"},{"line_number":169,"context_line":"                          self.servers_client, server[\u0027id\u0027], \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5201f7_6acc0236","line":169,"range":{"start_line":165,"start_character":0,"end_line":169,"end_character":70},"in_reply_to":"ba5201f7_d4967393","updated":"2017-01-03 10:12:06.000000000","message":"Done","commit_id":"3f558c5cb303d5ea619e9ab2b0bfb335fe99f4db"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"83b7949bccdf6f9f756c9c09600a74d2a876b9f8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def skip_checks(cls):"},{"line_number":35,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":36,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":37,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":38,"context_line":"            raise cls.skipException("},{"line_number":39,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":40,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_41c20786","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":79},"updated":"2017-01-09 07:17:18.000000000","message":"should use test.is_scheduler_filter_enabled, for scheduler_available_filters maybe [\u0027all\u0027]","commit_id":"db1cd532921ab58939b8edd9ad3cc98bf33da64f"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"c7ae9a6b199d8e03ed6ef8284fcaf858102c1fd6","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def skip_checks(cls):"},{"line_number":35,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":36,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":37,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":38,"context_line":"            raise cls.skipException("},{"line_number":39,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":40,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_1f78e8f1","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":79},"in_reply_to":"ba5201f7_41c20786","updated":"2017-01-11 08:52:57.000000000","message":"Unfortunately, test.is_scheduler_filter_enabled does not work correctly in some cases, see: https://bugs.launchpad.net/tempest/+bug/1628443","commit_id":"db1cd532921ab58939b8edd9ad3cc98bf33da64f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"83b7949bccdf6f9f756c9c09600a74d2a876b9f8","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _get_all_host_names(self):"},{"line_number":63,"context_line":"        hosts \u003d self.hosts_client.list_hosts()[\u0027hosts\u0027]"},{"line_number":64,"context_line":"        self.assertGreater(len(hosts), 0,"},{"line_number":65,"context_line":"                           \"Deployment contains 0 compute hosts.\")"},{"line_number":66,"context_line":"        computes \u003d [x[\u0027host_name\u0027] for x in hosts if x[\u0027service\u0027] \u003d\u003d \u0027compute\u0027]"},{"line_number":67,"context_line":"        return computes"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_814f8f32","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":66},"updated":"2017-01-09 07:17:18.000000000","message":"Move this check down, just before \"return computes\"","commit_id":"db1cd532921ab58939b8edd9ad3cc98bf33da64f"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"c7ae9a6b199d8e03ed6ef8284fcaf858102c1fd6","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _get_all_host_names(self):"},{"line_number":63,"context_line":"        hosts \u003d self.hosts_client.list_hosts()[\u0027hosts\u0027]"},{"line_number":64,"context_line":"        self.assertGreater(len(hosts), 0,"},{"line_number":65,"context_line":"                           \"Deployment contains 0 compute hosts.\")"},{"line_number":66,"context_line":"        computes \u003d [x[\u0027host_name\u0027] for x in hosts if x[\u0027service\u0027] \u003d\u003d \u0027compute\u0027]"},{"line_number":67,"context_line":"        return computes"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_84448f74","line":65,"range":{"start_line":64,"start_character":0,"end_line":65,"end_character":66},"in_reply_to":"ba5201f7_814f8f32","updated":"2017-01-11 08:52:57.000000000","message":"Done","commit_id":"db1cd532921ab58939b8edd9ad3cc98bf33da64f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"83b7949bccdf6f9f756c9c09600a74d2a876b9f8","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # Split all compute hosts between the two aggregates:"},{"line_number":91,"context_line":"        # one compute belongs to the first,"},{"line_number":92,"context_line":"        # the rest of the computes belong the second aggregate"},{"line_number":93,"context_line":"        hosts \u003d self._get_all_host_names()"},{"line_number":94,"context_line":"        self._add_host(aggregate_for_default_tenant[\u0027id\u0027], hosts[0])"},{"line_number":95,"context_line":"        for h in hosts[1:]:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_8166afb8","line":92,"range":{"start_line":92,"start_character":35,"end_line":92,"end_character":42},"updated":"2017-01-09 07:17:18.000000000","message":"belong to","commit_id":"db1cd532921ab58939b8edd9ad3cc98bf33da64f"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"c7ae9a6b199d8e03ed6ef8284fcaf858102c1fd6","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        # Split all compute hosts between the two aggregates:"},{"line_number":91,"context_line":"        # one compute belongs to the first,"},{"line_number":92,"context_line":"        # the rest of the computes belong the second aggregate"},{"line_number":93,"context_line":"        hosts \u003d self._get_all_host_names()"},{"line_number":94,"context_line":"        self._add_host(aggregate_for_default_tenant[\u0027id\u0027], hosts[0])"},{"line_number":95,"context_line":"        for h in hosts[1:]:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba5201f7_04597f5a","line":92,"range":{"start_line":92,"start_character":35,"end_line":92,"end_character":42},"in_reply_to":"ba5201f7_8166afb8","updated":"2017-01-11 08:52:57.000000000","message":"Done","commit_id":"db1cd532921ab58939b8edd9ad3cc98bf33da64f"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"7ac5f8e8138d17c760ac0ff6c88e6603e3d5331e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def skip_checks(cls):"},{"line_number":35,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":36,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":37,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":38,"context_line":"            raise cls.skipException("},{"line_number":39,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":40,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_1aab961e","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":79},"updated":"2017-01-11 09:23:34.000000000","message":"Anyway, I think test.is_scheduler_filter_enabled should be used, because if we configure tempest.conf correctly, nothing will be wrong. If we feel it is not so perfect, maybe we can modify test.is_scheduler_filter_enabled in a new patch.","commit_id":"ee6894d3e5cb3536705497d833c562ec910e0e33"},{"author":{"_account_id":16437,"name":"Anna Babich","email":"anna.v.babich@gmail.com","username":"ababich"},"change_message_id":"59a036176483d58dfdffa3b2b12e70984d0057b8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def skip_checks(cls):"},{"line_number":35,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":36,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":37,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":38,"context_line":"            raise cls.skipException("},{"line_number":39,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":40,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba5201f7_16f8ce48","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":79},"in_reply_to":"ba5201f7_1aab961e","updated":"2017-01-11 10:13:11.000000000","message":"Yep, it works if tempest.conf is configured correctly, but we still have \u0027all\u0027 parameter by default in tempest.conf of gates\u0027 environments, which will return True and may lead to test\u0027s failure.","commit_id":"ee6894d3e5cb3536705497d833c562ec910e0e33"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7395f7fcbc73deaff4a26a5f9c188b2336d146f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class TestAggregateMultiTenancyIsolation(manager.AggregatesScenarioTest):"},{"line_number":30,"context_line":"    \"\"\"Tests aggregates isolation\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    _host_key \u003d \"OS-EXT-SRV-ATTR:host\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_d441f40c","line":32,"range":{"start_line":32,"start_character":37,"end_line":32,"end_character":38},"updated":"2017-02-21 19:08:58.000000000","message":"credentials \u003d [\u0027primary\u0027, alt, \u0027admin\u0027]","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class TestAggregateMultiTenancyIsolation(manager.AggregatesScenarioTest):"},{"line_number":30,"context_line":"    \"\"\"Tests aggregates isolation\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    _host_key \u003d \"OS-EXT-SRV-ATTR:host\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_6f3cd3e2","line":32,"range":{"start_line":32,"start_character":37,"end_line":32,"end_character":38},"in_reply_to":"da36d5c6_d441f40c","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7395f7fcbc73deaff4a26a5f9c188b2336d146f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def skip_checks(cls):"},{"line_number":36,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":37,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":38,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_14cf0c80","line":37,"range":{"start_line":37,"start_character":14,"end_line":37,"end_character":46},"updated":"2017-02-21 19:08:58.000000000","message":"this aggregate is not enabled on nova side on devstack. we need to add that filter support. I will do that.","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def skip_checks(cls):"},{"line_number":36,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":37,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":38,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_8f3f47d5","line":37,"range":{"start_line":37,"start_character":14,"end_line":37,"end_character":46},"in_reply_to":"da36d5c6_14cf0c80","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"96838616dc61b652cd58934002d1fef4308b821a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def skip_checks(cls):"},{"line_number":36,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":37,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":38,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":41,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_19dca5e3","line":38,"range":{"start_line":38,"start_character":51,"end_line":38,"end_character":79},"updated":"2017-02-21 18:51:11.000000000","message":"Wrong opt : for using the filter, you need to add it into enabled_filters. Having it part of available_filters just helps out-of-tree filters to be used by Nova.","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7395f7fcbc73deaff4a26a5f9c188b2336d146f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def skip_checks(cls):"},{"line_number":36,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":37,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":38,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":41,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_13fac6bd","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":79},"updated":"2017-02-21 19:08:58.000000000","message":"you need to change this check to use if cls.is_scheduler_filter_enabled(flt)\n\nBecause CONF.compute_feature_enabled.scheduler_available_filters has special entry \u0027all\u0027 means nova\u0027s all default available filters are available which avoid to specify the default available filters list explicitly.\n\nIf it is configured as \u0027all\u0027 then it return true for \u0027AggregateMultiTenancyIsolation\u0027 filter","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def skip_checks(cls):"},{"line_number":36,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":37,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":38,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":41,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_ef30c303","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":79},"in_reply_to":"da36d5c6_13fac6bd","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def skip_checks(cls):"},{"line_number":36,"context_line":"        super(TestAggregateMultiTenancyIsolation, cls).skip_checks()"},{"line_number":37,"context_line":"        flt \u003d \u0027AggregateMultiTenancyIsolation\u0027"},{"line_number":38,"context_line":"        if flt not in CONF.compute_feature_enabled.scheduler_available_filters:"},{"line_number":39,"context_line":"            raise cls.skipException("},{"line_number":40,"context_line":"                \"The AggregateMultiTenancyIsolation filter is not available.\")"},{"line_number":41,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_2f19fb88","line":38,"range":{"start_line":38,"start_character":51,"end_line":38,"end_character":79},"in_reply_to":"da36d5c6_19dca5e3","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"96838616dc61b652cd58934002d1fef4308b821a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        if CONF.compute.min_compute_nodes \u003c 2:"},{"line_number":42,"context_line":"            raise cls.skipException("},{"line_number":43,"context_line":"                \"At least two compute nodes are required to run multinode \""},{"line_number":44,"context_line":"                \"tests.\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _create_tenant(self):"},{"line_number":47,"context_line":"        name \u003d data_utils.rand_name(\u0027aggregate\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_5959bd59","line":44,"updated":"2017-02-21 18:51:11.000000000","message":"I\u0027m very concerned by having a general Tempest scenario that requires that very specific layout : at least you need a multinode environment and a specific conf opt for just testing the output of a very small module. That looks very expensive to me and I\u0027m afraid of consuming all the infra resources just for those kind of large testbeds.\n\nFWIW, I was rather thinking of having the filters tested directly in the Nova tree by using fixtures like we do for our functional tests (but maybe in a separate subtree) and at least do simple POST calls and verify the results against what\u0027s expected.\nLater, we could think of having per-project Tempest testing, but I don\u0027t think it\u0027s required here. Here, we just want to make sure that if we boot an instance, it\u0027s either accepted or denied, that\u0027s it.","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7395f7fcbc73deaff4a26a5f9c188b2336d146f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                \"At least two compute nodes are required to run multinode \""},{"line_number":44,"context_line":"                \"tests.\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _create_tenant(self):"},{"line_number":47,"context_line":"        name \u003d data_utils.rand_name(\u0027aggregate\u0027)"},{"line_number":48,"context_line":"        desc \u003d data_utils.rand_name(\u0027desc\u0027)"},{"line_number":49,"context_line":"        tenants_client \u003d self.manager.tenants_client"},{"line_number":50,"context_line":"        tenant \u003d tenants_client.create_tenant(name\u003dname,"},{"line_number":51,"context_line":"                                              description\u003ddesc)[\u0027tenant\u0027]"},{"line_number":52,"context_line":"        tenant_id \u003d tenant[\u0027id\u0027]"},{"line_number":53,"context_line":"        LOG.debug(\"Created new tenant: %s\", tenant_id)"},{"line_number":54,"context_line":"        self.addCleanup(tenants_client.delete_tenant, tenant_id)"},{"line_number":55,"context_line":"        return tenant_id"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_instance_hostname(self, server_id):"},{"line_number":58,"context_line":"        server \u003d self.servers_client.show_server(server_id)[\u0027server\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_74ba080c","line":55,"range":{"start_line":46,"start_character":0,"end_line":55,"end_character":24},"updated":"2017-02-21 19:08:58.000000000","message":"this should not be needed if we create alt credential which can be used to fetch new tenant id and also to boot server with that tenant.","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                \"At least two compute nodes are required to run multinode \""},{"line_number":44,"context_line":"                \"tests.\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def _create_tenant(self):"},{"line_number":47,"context_line":"        name \u003d data_utils.rand_name(\u0027aggregate\u0027)"},{"line_number":48,"context_line":"        desc \u003d data_utils.rand_name(\u0027desc\u0027)"},{"line_number":49,"context_line":"        tenants_client \u003d self.manager.tenants_client"},{"line_number":50,"context_line":"        tenant \u003d tenants_client.create_tenant(name\u003dname,"},{"line_number":51,"context_line":"                                              description\u003ddesc)[\u0027tenant\u0027]"},{"line_number":52,"context_line":"        tenant_id \u003d tenant[\u0027id\u0027]"},{"line_number":53,"context_line":"        LOG.debug(\"Created new tenant: %s\", tenant_id)"},{"line_number":54,"context_line":"        self.addCleanup(tenants_client.delete_tenant, tenant_id)"},{"line_number":55,"context_line":"        return tenant_id"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def _get_instance_hostname(self, server_id):"},{"line_number":58,"context_line":"        server \u003d self.servers_client.show_server(server_id)[\u0027server\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_ef07e319","line":55,"range":{"start_line":46,"start_character":0,"end_line":55,"end_character":24},"in_reply_to":"da36d5c6_74ba080c","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7395f7fcbc73deaff4a26a5f9c188b2336d146f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        if use_default_tenant:"},{"line_number":74,"context_line":"            tenant_id \u003d self.manager.identity_client.tenant_id"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            tenant_id \u003d self._create_tenant()"},{"line_number":77,"context_line":"        metadata \u003d {\u0027filter_tenant_id\u0027: tenant_id}"},{"line_number":78,"context_line":"        self._set_aggregate_metadata(aggregate, metadata)"},{"line_number":79,"context_line":"        self._check_aggregate_details(aggregate, aggregate_name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_d4cad4a0","line":76,"range":{"start_line":76,"start_character":24,"end_line":76,"end_character":45},"updated":"2017-02-21 19:08:58.000000000","message":"instead of creating tenant alone we can just ask base class to create alt credential also and get the id from there\n        else:\n            tenant_id \u003d self.alt_manager.identity_client.tenant_id","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        if use_default_tenant:"},{"line_number":74,"context_line":"            tenant_id \u003d self.manager.identity_client.tenant_id"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            tenant_id \u003d self._create_tenant()"},{"line_number":77,"context_line":"        metadata \u003d {\u0027filter_tenant_id\u0027: tenant_id}"},{"line_number":78,"context_line":"        self._set_aggregate_metadata(aggregate, metadata)"},{"line_number":79,"context_line":"        self._check_aggregate_details(aggregate, aggregate_name,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_0f035710","line":76,"range":{"start_line":76,"start_character":24,"end_line":76,"end_character":45},"in_reply_to":"da36d5c6_d4cad4a0","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7395f7fcbc73deaff4a26a5f9c188b2336d146f","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @decorators.idempotent_id(\u0027a795e02f-900b-4811-aa43-24420547531f\u0027)"},{"line_number":84,"context_line":"    @test.services(\u0027compute\u0027)"},{"line_number":85,"context_line":"    def test_aggregate_one_valid_host(self):"},{"line_number":86,"context_line":"        aggregate_for_default_tenant \u003d \\"},{"line_number":87,"context_line":"            self._create_aggregate_with_tenant_filter()"},{"line_number":88,"context_line":"        aggregate_for_tenant_2 \u003d \\"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_745128d8","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":37},"updated":"2017-02-21 19:08:58.000000000","message":"as we can do boot server for both aggregate so how about name this tests to- test_aggregate_tenant_isolation","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    @decorators.idempotent_id(\u0027a795e02f-900b-4811-aa43-24420547531f\u0027)"},{"line_number":84,"context_line":"    @test.services(\u0027compute\u0027)"},{"line_number":85,"context_line":"    def test_aggregate_one_valid_host(self):"},{"line_number":86,"context_line":"        aggregate_for_default_tenant \u003d \\"},{"line_number":87,"context_line":"            self._create_aggregate_with_tenant_filter()"},{"line_number":88,"context_line":"        aggregate_for_tenant_2 \u003d \\"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_4a037d0d","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":37},"in_reply_to":"da36d5c6_745128d8","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7395f7fcbc73deaff4a26a5f9c188b2336d146f","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                      hosts\u003d[hosts[0]])"},{"line_number":100,"context_line":"        self._check_aggregate_details(aggregate_for_tenant_2, hosts\u003dhosts[1:])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        server \u003d self.create_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":103,"context_line":"        host \u003d self._get_instance_hostname(server[\u0027id\u0027])"},{"line_number":104,"context_line":"        self.assertEqual(hosts[0], host)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @decorators.idempotent_id(\u0027bcb57526-fc01-4574-809b-59a38d4688b0\u0027)"},{"line_number":107,"context_line":"    @test.services(\u0027compute\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_1442ac3e","line":104,"range":{"start_line":102,"start_character":0,"end_line":104,"end_character":40},"updated":"2017-02-21 19:08:58.000000000","message":"can we create another server with tenant-2 and see it boot on host aggregated for tenant2\n\n        server \u003d self.create_server(clients\u003dself.alt_manager, wait_until\u003d\u0027ACTIVE\u0027)\n        host \u003d self._get_instance_hostname(server[\u0027id\u0027])\n        self.assertIn(host, hosts[1:])","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                      hosts\u003d[hosts[0]])"},{"line_number":100,"context_line":"        self._check_aggregate_details(aggregate_for_tenant_2, hosts\u003dhosts[1:])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        server \u003d self.create_server(wait_until\u003d\u0027ACTIVE\u0027)"},{"line_number":103,"context_line":"        host \u003d self._get_instance_hostname(server[\u0027id\u0027])"},{"line_number":104,"context_line":"        self.assertEqual(hosts[0], host)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @decorators.idempotent_id(\u0027bcb57526-fc01-4574-809b-59a38d4688b0\u0027)"},{"line_number":107,"context_line":"    @test.services(\u0027compute\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_6a0a0123","line":104,"range":{"start_line":102,"start_character":0,"end_line":104,"end_character":40},"in_reply_to":"da36d5c6_1442ac3e","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7395f7fcbc73deaff4a26a5f9c188b2336d146f","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @decorators.idempotent_id(\u0027c72eef51-94cb-473d-8aba-b23cb857535e\u0027)"},{"line_number":146,"context_line":"    @test.services(\u0027compute\u0027)"},{"line_number":147,"context_line":"    def test_aggregate_no_free_host(self):"},{"line_number":148,"context_line":"        aggregate_for_tenant_2 \u003d \\"},{"line_number":149,"context_line":"            self._create_aggregate_with_tenant_filter(use_default_tenant\u003dFalse)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_991255b3","line":147,"range":{"start_line":147,"start_character":8,"end_line":147,"end_character":35},"updated":"2017-02-21 19:08:58.000000000","message":"can we rename this to something-\u003e test_aggregate_no_avalable_host","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"},{"author":{"_account_id":18600,"name":"Ferenc Horváth","email":"hferenc@inf.u-szeged.hu","username":"hferenc"},"change_message_id":"7657c9b9b4f2d4d6340f0606c41e1fc3152915fb","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @decorators.idempotent_id(\u0027c72eef51-94cb-473d-8aba-b23cb857535e\u0027)"},{"line_number":146,"context_line":"    @test.services(\u0027compute\u0027)"},{"line_number":147,"context_line":"    def test_aggregate_no_free_host(self):"},{"line_number":148,"context_line":"        aggregate_for_tenant_2 \u003d \\"},{"line_number":149,"context_line":"            self._create_aggregate_with_tenant_filter(use_default_tenant\u003dFalse)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da36d5c6_8a0d7539","line":147,"range":{"start_line":147,"start_character":8,"end_line":147,"end_character":35},"in_reply_to":"da36d5c6_991255b3","updated":"2017-02-22 14:36:07.000000000","message":"Done","commit_id":"e18a71ab4cec63b6f2dd08fa9239123476c6011b"}]}
