)]}'
{"tempest/scenario/test_server_multinode.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"15f4d94aefe2c03a39ed0f684dc0d517adc57c84","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"load_tests \u003d test_utils.load_tests_input_scenario_utils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class TestServerMultinode(manager.ScenarioTest):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_80186e1f","line":28,"updated":"2015-11-11 17:49:52.000000000","message":"Do we really want to test scenarios this test? This will make a test matrix around all the flavors and images provided via some optional config variables and run through all the permutations of that. Isn\u0027t just running this with the default configured flavor and image enough?","commit_id":"441439db8a3ad3096e96d41086e222bac2153f0b"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8e772423aa68749596c3795ae79fb3bb3fd53e34","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"load_tests \u003d test_utils.load_tests_input_scenario_utils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class TestServerMultinode(manager.ScenarioTest):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_00b23e06","line":28,"in_reply_to":"da85f559_80186e1f","updated":"2015-11-11 17:51:14.000000000","message":"no, we don\u0027t","commit_id":"441439db8a3ad3096e96d41086e222bac2153f0b"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8b4d54d850b0c91be534b9ccbc68a4a4deb59397","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":64,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":65,"context_line":"    def test_schedule_to_all_nodes(self):"},{"line_number":66,"context_line":"        host_client \u003d self.os_adm.hosts_client"},{"line_number":67,"context_line":"        hosts \u003d host_client.list_hosts()[\u0027hosts\u0027]"},{"line_number":68,"context_line":"        hosts \u003d [x for x in hosts if x[\u0027service\u0027] \u003d\u003d \u0027compute\u0027]"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_207182a8","line":66,"updated":"2015-11-11 17:43:24.000000000","message":"this doesn\u0027t work, not sure at this stage on how to expose os_adm for scenario tests","commit_id":"441439db8a3ad3096e96d41086e222bac2153f0b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"15f4d94aefe2c03a39ed0f684dc0d517adc57c84","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        hosts \u003d [x for x in hosts if x[\u0027service\u0027] \u003d\u003d \u0027compute\u0027]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # ensure we have at least as many hypervisors as we expect"},{"line_number":71,"context_line":"        self.assertEqual(len(hosts), CONF.compute.min_compute_nodes)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        for host in hosts:"},{"line_number":74,"context_line":"            create_kwargs \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_0539f0f1","line":71,"updated":"2015-11-11 17:49:52.000000000","message":"Shouldn\u0027t this be len(hosts) \u003e\u003d CONF.compute.min_compute_nodes?","commit_id":"441439db8a3ad3096e96d41086e222bac2153f0b"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8e772423aa68749596c3795ae79fb3bb3fd53e34","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        hosts \u003d [x for x in hosts if x[\u0027service\u0027] \u003d\u003d \u0027compute\u0027]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # ensure we have at least as many hypervisors as we expect"},{"line_number":71,"context_line":"        self.assertEqual(len(hosts), CONF.compute.min_compute_nodes)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        for host in hosts:"},{"line_number":74,"context_line":"            create_kwargs \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_e0cdba85","line":71,"in_reply_to":"da85f559_0539f0f1","updated":"2015-11-11 17:51:14.000000000","message":"actually, GreatThanEqual","commit_id":"441439db8a3ad3096e96d41086e222bac2153f0b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"15f4d94aefe2c03a39ed0f684dc0d517adc57c84","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            # by getting to active state here, this means this has"},{"line_number":79,"context_line":"            # landed on the host in question."},{"line_number":80,"context_line":"            self.create_server(image\u003dself.image_ref,"},{"line_number":81,"context_line":"                               flavor\u003dself.flavor_ref,"},{"line_number":82,"context_line":"                               create_kwargs\u003dcreate_kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_2023c2a8","line":80,"updated":"2015-11-11 17:49:52.000000000","message":"Do we want to do any additional validation on the server? Or is just seeing it go active enough?","commit_id":"441439db8a3ad3096e96d41086e222bac2153f0b"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8e772423aa68749596c3795ae79fb3bb3fd53e34","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            # by getting to active state here, this means this has"},{"line_number":79,"context_line":"            # landed on the host in question."},{"line_number":80,"context_line":"            self.create_server(image\u003dself.image_ref,"},{"line_number":81,"context_line":"                               flavor\u003dself.flavor_ref,"},{"line_number":82,"context_line":"                               create_kwargs\u003dcreate_kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da85f559_e094da43","line":80,"in_reply_to":"da85f559_2023c2a8","updated":"2015-11-11 17:51:14.000000000","message":"Active should be good enough for now.","commit_id":"441439db8a3ad3096e96d41086e222bac2153f0b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f829c464344cd5af3afcd3459c990fac5a9fb6c7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                \u0027{image} does not fit in {flavor}\u0027.format("},{"line_number":50,"context_line":"                    image\u003dself.image_ref, flavor\u003dself.flavor_ref"},{"line_number":51,"context_line":"                )"},{"line_number":52,"context_line":"            )"},{"line_number":53,"context_line":"        self.run_ssh \u003d CONF.validation.run_validation and \\"},{"line_number":54,"context_line":"            self.image_utils.is_sshable_image(self.image_ref)"},{"line_number":55,"context_line":"        self.ssh_user \u003d self.image_utils.ssh_user(self.image_ref)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_9418b376","line":52,"updated":"2015-11-11 18:01:21.000000000","message":"So all the stuff above this is leftover from the testscenarios stuff, where if there isn\u0027t a config for flavors and images use the normal stuff, and then setup the run env using the image utils stuff. I don\u0027t think we need this anymore since you dropped the load_tests call","commit_id":"599e088b2b97dad49b0411847795a1c829b30f32"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"ca42ffb6a0c71474f617bc650740b779fa4f431e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                \u0027{image} does not fit in {flavor}\u0027.format("},{"line_number":50,"context_line":"                    image\u003dself.image_ref, flavor\u003dself.flavor_ref"},{"line_number":51,"context_line":"                )"},{"line_number":52,"context_line":"            )"},{"line_number":53,"context_line":"        self.run_ssh \u003d CONF.validation.run_validation and \\"},{"line_number":54,"context_line":"            self.image_utils.is_sshable_image(self.image_ref)"},{"line_number":55,"context_line":"        self.ssh_user \u003d self.image_utils.ssh_user(self.image_ref)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_145b63f7","line":52,"in_reply_to":"da85f559_9418b376","updated":"2015-11-11 18:06:03.000000000","message":"Done","commit_id":"599e088b2b97dad49b0411847795a1c829b30f32"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c1d5a51d3828b5ea90d9c52f84abaaaea32fa1c3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        hosts \u003d [x for x in hosts if x[\u0027service\u0027] \u003d\u003d \u0027compute\u0027]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        # ensure we have at least as many compute hosts as we expect"},{"line_number":45,"context_line":"        self.assertGreaterEqual("},{"line_number":46,"context_line":"            len(hosts),"},{"line_number":47,"context_line":"            CONF.compute.min_compute_nodes,"},{"line_number":48,"context_line":"            \"Hosts %s did not include minimum number of entries\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_0e1b3fcb","line":45,"updated":"2015-11-12 00:32:56.000000000","message":"This is a bit border-line between being an invalid configuration and a failed assertion. If we assume the configuration was done properly, it means we did not get as many nodes as we expected. However this assert is checking that only in a few cases, e.g. if we have 1k nodes system and we set min to 5, any number of nodes \u003e5 will pass the assert.\n\nBottom line this looks more like a config check than a test, so I think throwing and InvalidConfiguration exception would be more appropriate.","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"d3e6222d9ead76ed2b5d0869d664ce935d08d273","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        hosts \u003d [x for x in hosts if x[\u0027service\u0027] \u003d\u003d \u0027compute\u0027]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        # ensure we have at least as many compute hosts as we expect"},{"line_number":45,"context_line":"        self.assertGreaterEqual("},{"line_number":46,"context_line":"            len(hosts),"},{"line_number":47,"context_line":"            CONF.compute.min_compute_nodes,"},{"line_number":48,"context_line":"            \"Hosts %s did not include minimum number of entries\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_1884cd08","line":45,"in_reply_to":"da85f559_0e1b3fcb","updated":"2015-11-12 11:32:37.000000000","message":"Yes, which is expected. This is specifically saying you expect your cloud to be \u003c----\u003e this big. If it\u0027s not, what happened is a bunch of your workers fell away and you didn\u0027t notice.","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b9cad83d8e1736e8b145482c1a7384f09fbecd15","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        hosts \u003d [x for x in hosts if x[\u0027service\u0027] \u003d\u003d \u0027compute\u0027]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        # ensure we have at least as many compute hosts as we expect"},{"line_number":45,"context_line":"        self.assertGreaterEqual("},{"line_number":46,"context_line":"            len(hosts),"},{"line_number":47,"context_line":"            CONF.compute.min_compute_nodes,"},{"line_number":48,"context_line":"            \"Hosts %s did not include minimum number of entries\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_cafbc377","line":45,"in_reply_to":"da85f559_1884cd08","updated":"2015-11-12 13:07:48.000000000","message":"My point here is that what we are verifying here is that a configuration value which describes the cloud under tests matches the cloud under tests, so a mismatch is not a test failure per-se, it\u0027s an error (InvalidConfiguration would be the right exception).","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c1d5a51d3828b5ea90d9c52f84abaaaea32fa1c3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # compute nodes but set min to 3)."},{"line_number":54,"context_line":"        for host in hosts[:CONF.compute.min_compute_nodes]:"},{"line_number":55,"context_line":"            create_kwargs \u003d {"},{"line_number":56,"context_line":"                \u0027scheduler_hints\u0027: {\u0027force_hosts\u0027: host[\u0027host_name\u0027]}"},{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            # by getting to active state here, this means this has"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_6eb52b7c","line":56,"updated":"2015-11-12 00:32:56.000000000","message":"Doesn\u0027t this require an admin? The server will be created using the primary creds, which might not work depending on the compute policy.","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"814900acb51cb8d1066bd3c9e415dee7499ff769","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # compute nodes but set min to 3)."},{"line_number":54,"context_line":"        for host in hosts[:CONF.compute.min_compute_nodes]:"},{"line_number":55,"context_line":"            create_kwargs \u003d {"},{"line_number":56,"context_line":"                \u0027scheduler_hints\u0027: {\u0027force_hosts\u0027: host[\u0027host_name\u0027]}"},{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            # by getting to active state here, this means this has"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_bb16db49","line":56,"in_reply_to":"da85f559_38bd11d8","updated":"2015-11-12 11:42:46.000000000","message":"Well if default policy allows this, I think it\u0027s fine as it is.","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"d3e6222d9ead76ed2b5d0869d664ce935d08d273","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        # compute nodes but set min to 3)."},{"line_number":54,"context_line":"        for host in hosts[:CONF.compute.min_compute_nodes]:"},{"line_number":55,"context_line":"            create_kwargs \u003d {"},{"line_number":56,"context_line":"                \u0027scheduler_hints\u0027: {\u0027force_hosts\u0027: host[\u0027host_name\u0027]}"},{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            # by getting to active state here, this means this has"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_38bd11d8","line":56,"in_reply_to":"da85f559_6eb52b7c","updated":"2015-11-12 11:32:37.000000000","message":"yeh, we\u0027re definitely into a realm where compute policy is going to be tweaked here. Default compute policy allows this. But there are so many ways the cloud could be configured that don\u0027t let this work.","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c1d5a51d3828b5ea90d9c52f84abaaaea32fa1c3","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            # by getting to active state here, this means this has"},{"line_number":60,"context_line":"            # landed on the host in question."},{"line_number":61,"context_line":"            self.create_server(image\u003dCONF.compute.image_ref,"},{"line_number":62,"context_line":"                               flavor\u003dCONF.compute.flavor_ref,"},{"line_number":63,"context_line":"                               create_kwargs\u003dcreate_kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_4e5dc745","line":60,"updated":"2015-11-12 00:32:56.000000000","message":"The check of the target host is not included in create_server, so I think it would make sense to discover the created tests, it\u0027s host and assert it matches the host from the scheduling hint.","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b9cad83d8e1736e8b145482c1a7384f09fbecd15","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            # by getting to active state here, this means this has"},{"line_number":60,"context_line":"            # landed on the host in question."},{"line_number":61,"context_line":"            self.create_server(image\u003dCONF.compute.image_ref,"},{"line_number":62,"context_line":"                               flavor\u003dCONF.compute.flavor_ref,"},{"line_number":63,"context_line":"                               create_kwargs\u003dcreate_kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_8aacdb8c","line":60,"in_reply_to":"da85f559_1b592735","updated":"2015-11-12 13:07:48.000000000","message":"We could check the uniqueness in the list of host sha1s from all created server, but that\u0027s something we could do in a follow-up patch.","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"d3e6222d9ead76ed2b5d0869d664ce935d08d273","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            # by getting to active state here, this means this has"},{"line_number":60,"context_line":"            # landed on the host in question."},{"line_number":61,"context_line":"            self.create_server(image\u003dCONF.compute.image_ref,"},{"line_number":62,"context_line":"                               flavor\u003dCONF.compute.flavor_ref,"},{"line_number":63,"context_line":"                               create_kwargs\u003dcreate_kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_9870bd41","line":60,"in_reply_to":"da85f559_4e5dc745","updated":"2015-11-12 11:32:37.000000000","message":"It is not, however with that scheduler hint it can\u0027t reschedule to a different node. So it will end up ACTIVE on that node or in ERROR.","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"814900acb51cb8d1066bd3c9e415dee7499ff769","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"            # by getting to active state here, this means this has"},{"line_number":60,"context_line":"            # landed on the host in question."},{"line_number":61,"context_line":"            self.create_server(image\u003dCONF.compute.image_ref,"},{"line_number":62,"context_line":"                               flavor\u003dCONF.compute.flavor_ref,"},{"line_number":63,"context_line":"                               create_kwargs\u003dcreate_kwargs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da85f559_1b592735","line":60,"in_reply_to":"da85f559_9870bd41","updated":"2015-11-12 11:42:46.000000000","message":"Sure but that\u0027s on the assumption that the scheduler is working as expected.  \nI know it would be a kind of indirect test, but in case of scenario I think that\u0027s actually ok.","commit_id":"37e8b178385b94d826dbf0f190804e3f1f80870b"}]}
