)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"6b658e31a4e70eb10ead1e14c657f18f88e80309","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Andrey Volkov \u003cavolkov@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-15 18:59:54 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Eliminate additional DB queries in nova lists"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Servers detail call has the extension which adds additional attribute"},{"line_number":10,"context_line":"host_status to the instance (server). This extension mechanism issues DB"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3ac371cc_e00c7496","line":7,"updated":"2016-08-15 16:47:49.000000000","message":"Hmm, I just tried the same request on my devstack and don\u0027t see the (1+N) queries problem? Is it a particular micro version?\n\nI suggest you also provide some stats here (on number of SQL queries for N instances or output of profiler before and after your change).","commit_id":"b971de716c5b9cb036be3cbacfa24ebfdfbde2f1"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"8375598ab8c127ce50020e74cfadd519c051aeb6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Andrey Volkov \u003cavolkov@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-08-15 18:59:54 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Eliminate additional DB queries in nova lists"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Servers detail call has the extension which adds additional attribute"},{"line_number":10,"context_line":"host_status to the instance (server). This extension mechanism issues DB"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3ac371cc_6284efd3","line":7,"in_reply_to":"3ac371cc_e00c7496","updated":"2016-08-16 08:15:41.000000000","message":"Yes, it\u0027s 1+N where N isn\u0027t a number of instances but a number of hosts.\nWhen we are getting instance host status\nthe line below issues an additional query to get services.\nhttps://github.com/openstack/nova/blob/master/nova/compute/api.py#L3661\nLuckily, it\u0027s cached in host_status_dict\nhttps://github.com/openstack/nova/blob/master/nova/compute/api.py#L3682\nIt\u0027s not the particucal micro version but the master branch.\nI\u0027ve updated commit message.","commit_id":"b971de716c5b9cb036be3cbacfa24ebfdfbde2f1"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"e699ded30fd8cd8a459918ed5bf1b039b904c27e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Eliminate additional DB queries in nova lists"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Servers detail call has the extension which adds additional attribute"},{"line_number":10,"context_line":"host_status to the instance (server). This extension mechanism issues DB"},{"line_number":11,"context_line":"query for each instance.host which can be an overhead for installation"},{"line_number":12,"context_line":"with the big amount of hosts. This change eliminates additional queries"},{"line_number":13,"context_line":"and replaces it to the join query."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3ac371cc_877eef16","line":10,"updated":"2016-08-17 19:44:07.000000000","message":"nit: a DB query","commit_id":"5e35ff728b0862000939aeb3a4467aabf1796833"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"e699ded30fd8cd8a459918ed5bf1b039b904c27e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Servers detail call has the extension which adds additional attribute"},{"line_number":10,"context_line":"host_status to the instance (server). This extension mechanism issues DB"},{"line_number":11,"context_line":"query for each instance.host which can be an overhead for installation"},{"line_number":12,"context_line":"with the big amount of hosts. This change eliminates additional queries"},{"line_number":13,"context_line":"and replaces it to the join query."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Before this change, it was K + N queries to DB"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3ac371cc_07915f47","line":12,"updated":"2016-08-17 19:44:07.000000000","message":"nit: large number of hosts","commit_id":"5e35ff728b0862000939aeb3a4467aabf1796833"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"e699ded30fd8cd8a459918ed5bf1b039b904c27e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"host_status to the instance (server). This extension mechanism issues DB"},{"line_number":11,"context_line":"query for each instance.host which can be an overhead for installation"},{"line_number":12,"context_line":"with the big amount of hosts. This change eliminates additional queries"},{"line_number":13,"context_line":"and replaces it to the join query."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Before this change, it was K + N queries to DB"},{"line_number":16,"context_line":"where K is a number of queries to get instances list and N is a number of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3ac371cc_4797d739","line":13,"updated":"2016-08-17 19:44:07.000000000","message":"nit: replaces them with a join","commit_id":"5e35ff728b0862000939aeb3a4467aabf1796833"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"6b658e31a4e70eb10ead1e14c657f18f88e80309","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":322,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(req.params)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        expected_attrs \u003d [\u0027pci_devices\u0027, \u0027services\u0027]"},{"line_number":325,"context_line":"        if is_detail:"},{"line_number":326,"context_line":"            if api_version_request.is_supported(req, \u00272.26\u0027):"},{"line_number":327,"context_line":"                expected_attrs.append(\"tags\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ac371cc_40abc874","line":324,"updated":"2016-08-15 16:47:49.000000000","message":"Do we really need to load this attribute if is_detail is False? Looks like we do not return this data - http://developer.openstack.org/api-ref-compute-v2.1.html#listServers","commit_id":"b971de716c5b9cb036be3cbacfa24ebfdfbde2f1"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"8375598ab8c127ce50020e74cfadd519c051aeb6","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":322,"context_line":"        sort_keys, sort_dirs \u003d common.get_sort_params(req.params)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        expected_attrs \u003d [\u0027pci_devices\u0027, \u0027services\u0027]"},{"line_number":325,"context_line":"        if is_detail:"},{"line_number":326,"context_line":"            if api_version_request.is_supported(req, \u00272.26\u0027):"},{"line_number":327,"context_line":"                expected_attrs.append(\"tags\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ac371cc_3ef96f81","line":324,"in_reply_to":"3ac371cc_40abc874","updated":"2016-08-16 08:15:41.000000000","message":"Great point, thanks.","commit_id":"b971de716c5b9cb036be3cbacfa24ebfdfbde2f1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"78f48b38381a81df62f91924c67d7fb7be5d76a6","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        expected_attrs \u003d [\u0027pci_devices\u0027]"},{"line_number":333,"context_line":"        if is_detail:"},{"line_number":334,"context_line":"            expected_attrs.append(\u0027services\u0027)"},{"line_number":335,"context_line":"            if api_version_request.is_supported(req, \u00272.26\u0027):"},{"line_number":336,"context_line":"                expected_attrs.append(\"tags\")"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_423b6cea","line":334,"updated":"2017-09-25 21:29:47.000000000","message":"The host_status stuff was introduced in microversion 2.16, so we should only need to join on the services table if requesting microversion \u003e\u003d 2.16, otherwise we\u0027re actually hurting performance for someone that\u0027s just requesting at 2.1.","commit_id":"7a391e400214aeb0c0bba430df8b651f0ea9cf83"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"36c8dbaf098889d2281ba63c46ada60a5a592b03","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        expected_attrs \u003d [\u0027pci_devices\u0027]"},{"line_number":333,"context_line":"        if is_detail:"},{"line_number":334,"context_line":"            expected_attrs.append(\u0027services\u0027)"},{"line_number":335,"context_line":"            if api_version_request.is_supported(req, \u00272.26\u0027):"},{"line_number":336,"context_line":"                expected_attrs.append(\"tags\")"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_821a847a","line":334,"in_reply_to":"7f515b1d_423b6cea","updated":"2017-09-25 21:30:27.000000000","message":"Also, we only need this, by default, if the token is for an admin.","commit_id":"7a391e400214aeb0c0bba430df8b651f0ea9cf83"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"8abe423d8c1a6ddbeaa751ca859c33a7c29a5666","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        expected_attrs \u003d [\u0027pci_devices\u0027]"},{"line_number":333,"context_line":"        if is_detail:"},{"line_number":334,"context_line":"            expected_attrs.append(\u0027services\u0027)"},{"line_number":335,"context_line":"            if api_version_request.is_supported(req, \u00272.26\u0027):"},{"line_number":336,"context_line":"                expected_attrs.append(\"tags\")"},{"line_number":337,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_f2457f16","line":334,"in_reply_to":"7f515b1d_821a847a","updated":"2017-09-26 04:47:04.000000000","message":"Will prepare a new patch to fix issues you mentioned.","commit_id":"7a391e400214aeb0c0bba430df8b651f0ea9cf83"}],"nova/tests/unit/api/openstack/compute/test_serversV21.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"e699ded30fd8cd8a459918ed5bf1b039b904c27e","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        res_dict \u003d self.controller.show(req, FAKE_UUID)"},{"line_number":266,"context_line":"        self.assertEqual(res_dict[\u0027server\u0027][\u0027id\u0027], FAKE_UUID)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def test_get_server_joins_pci_devices(self):"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        def fake_get(_self, *args, **kwargs):"},{"line_number":271,"context_line":"            expected_attrs \u003d kwargs[\u0027expected_attrs\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_e7d9a358","line":268,"updated":"2016-08-17 19:44:07.000000000","message":"shouldn\u0027t we add a similar test case for services table?","commit_id":"5e35ff728b0862000939aeb3a4467aabf1796833"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"f95593ea6396b928e641c721c64d15a041ed9b6d","unresolved":false,"context_lines":[{"line_number":1267,"context_line":""},{"line_number":1268,"context_line":"        self.stubs.Set(compute_api.API, \u0027get_all\u0027, fake_get_all)"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":"        req \u003d self.req(\u0027/fake/servers\u0027, use_admin_context\u003dTrue)"},{"line_number":1271,"context_line":"        self.assertIn(\u0027servers\u0027, self.controller.index(req))"},{"line_number":1272,"context_line":""},{"line_number":1273,"context_line":"    def test_get_servers_joins_services(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_d26063a7","line":1270,"updated":"2016-08-18 15:53:13.000000000","message":"which makes we wonder if we need a follow up change to avoid this join in the non-detail query ;)","commit_id":"c1383db9cfbe2c99f7790d6ebfa27a253b9afb6a"}]}
