)]}'
{"openstackclient/compute/v2/server.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"733430d210d62ebce008fd3be8912312e849fb39","unresolved":false,"context_lines":[{"line_number":2453,"context_line":"            \u0027--topology\u0027,"},{"line_number":2454,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":2455,"context_line":"            default\u003dFalse,"},{"line_number":2456,"context_line":"            help\u003d_(\u0027Display server NUMA topology information\u0027),"},{"line_number":2457,"context_line":"        )"},{"line_number":2458,"context_line":"        return parser"},{"line_number":2459,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5faad753_a46329b1","line":2456,"updated":"2019-09-10 21:08:03.000000000","message":"This should mention the required --os-compute-api-version.","commit_id":"f2492a344276bd1f3e4b4156123f3a3f272d29bc"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"36ecfeb8a024ed22134900810fa898ad2457ddfd","unresolved":false,"context_lines":[{"line_number":2453,"context_line":"            \u0027--topology\u0027,"},{"line_number":2454,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":2455,"context_line":"            default\u003dFalse,"},{"line_number":2456,"context_line":"            help\u003d_(\u0027Display server NUMA topology information\u0027),"},{"line_number":2457,"context_line":"        )"},{"line_number":2458,"context_line":"        return parser"},{"line_number":2459,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5faad753_493e06db","line":2456,"in_reply_to":"5faad753_a46329b1","updated":"2019-09-11 08:37:03.000000000","message":"Done","commit_id":"f2492a344276bd1f3e4b4156123f3a3f272d29bc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"733430d210d62ebce008fd3be8912312e849fb39","unresolved":false,"context_lines":[{"line_number":2470,"context_line":"                ))"},{"line_number":2471,"context_line":"                return ({}, {})"},{"line_number":2472,"context_line":"        elif parsed_args.topology:"},{"line_number":2473,"context_line":"            (resp, data) \u003d server.topology()"},{"line_number":2474,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2475,"context_line":"                self.app.stderr.write(_("},{"line_number":2476,"context_line":"                    \"Error retrieving NUMA topology data\\n\""}],"source_content_type":"text/x-python","patch_set":3,"id":"5faad753_645d31e8","line":2473,"range":{"start_line":2473,"start_character":27,"end_line":2473,"end_character":44},"updated":"2019-09-10 21:08:03.000000000","message":"This won\u0027t work without python-novaclient \u003e\u003d 15.1.0 for this change:\n\nhttps://review.opendev.org/#/c/675304/\n\nTherefore this OSC change should update lower-constraints.txt and requirements.txt to require that version. That means you have to depend on this as well:\n\nhttps://review.opendev.org/#/c/681148/","commit_id":"f2492a344276bd1f3e4b4156123f3a3f272d29bc"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"36ecfeb8a024ed22134900810fa898ad2457ddfd","unresolved":false,"context_lines":[{"line_number":2470,"context_line":"                ))"},{"line_number":2471,"context_line":"                return ({}, {})"},{"line_number":2472,"context_line":"        elif parsed_args.topology:"},{"line_number":2473,"context_line":"            (resp, data) \u003d server.topology()"},{"line_number":2474,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2475,"context_line":"                self.app.stderr.write(_("},{"line_number":2476,"context_line":"                    \"Error retrieving NUMA topology data\\n\""}],"source_content_type":"text/x-python","patch_set":3,"id":"5faad753_7422ba02","line":2473,"range":{"start_line":2473,"start_character":27,"end_line":2473,"end_character":44},"in_reply_to":"5faad753_645d31e8","updated":"2019-09-11 08:37:03.000000000","message":"Done","commit_id":"f2492a344276bd1f3e4b4156123f3a3f272d29bc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0be8326fe8a68e0f31c0fc96ef2e8e0bc8dab06d","unresolved":false,"context_lines":[{"line_number":2472,"context_line":"                ))"},{"line_number":2473,"context_line":"                return ({}, {})"},{"line_number":2474,"context_line":"        elif parsed_args.topology:"},{"line_number":2475,"context_line":"            (resp, data) \u003d server.topology()"},{"line_number":2476,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2477,"context_line":"                self.app.stderr.write(_("},{"line_number":2478,"context_line":"                    \"Error retrieving NUMA topology data\\n\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_96367151","line":2475,"range":{"start_line":2475,"start_character":27,"end_line":2475,"end_character":44},"updated":"2019-10-22 22:16:42.000000000","message":"Isn\u0027t this going to blow up in some ugly way if you aren\u0027t using a high enough microversion? Wouldn\u0027t it be better UX to check the microversion before calling this and giving a user-friendly error message?","commit_id":"36dc7c22a7f6952451bead4763bc81dda57aff02"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"f3d9c7a15b4fae080341013e99cce7e43fb09c72","unresolved":false,"context_lines":[{"line_number":2472,"context_line":"                ))"},{"line_number":2473,"context_line":"                return ({}, {})"},{"line_number":2474,"context_line":"        elif parsed_args.topology:"},{"line_number":2475,"context_line":"            (resp, data) \u003d server.topology()"},{"line_number":2476,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2477,"context_line":"                self.app.stderr.write(_("},{"line_number":2478,"context_line":"                    \"Error retrieving NUMA topology data\\n\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_4220334a","line":2475,"range":{"start_line":2475,"start_character":27,"end_line":2475,"end_character":44},"in_reply_to":"3fa7e38b_96367151","updated":"2019-10-23 06:21:55.000000000","message":"Done","commit_id":"36dc7c22a7f6952451bead4763bc81dda57aff02"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9b7cf44f30e93f788650e26c8988c55d1536fa","unresolved":false,"context_lines":[{"line_number":2456,"context_line":"    _description \u003d _("},{"line_number":2457,"context_line":"        \"Show server details. Specify ``--os-compute-api-version 2.47`` \""},{"line_number":2458,"context_line":"        \"or higher to see the embedded flavor information for the server. \""},{"line_number":2459,"context_line":"        \"Specify ``--os-compute-api-version 2.78`` or higher to see NUMA \""},{"line_number":2460,"context_line":"        \"topology information.\")"},{"line_number":2461,"context_line":""},{"line_number":2462,"context_line":"    def get_parser(self, prog_name):"},{"line_number":2463,"context_line":"        parser \u003d super(ShowServer, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_996f19c3","line":2460,"range":{"start_line":2459,"start_character":8,"end_line":2460,"end_character":31},"updated":"2019-11-20 13:48:18.000000000","message":"I would just move this into the option help since it\u0027s specific to that option.","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"3ce7e3636bc61073fedf266766d22459c716f39c","unresolved":false,"context_lines":[{"line_number":2456,"context_line":"    _description \u003d _("},{"line_number":2457,"context_line":"        \"Show server details. Specify ``--os-compute-api-version 2.47`` \""},{"line_number":2458,"context_line":"        \"or higher to see the embedded flavor information for the server. \""},{"line_number":2459,"context_line":"        \"Specify ``--os-compute-api-version 2.78`` or higher to see NUMA \""},{"line_number":2460,"context_line":"        \"topology information.\")"},{"line_number":2461,"context_line":""},{"line_number":2462,"context_line":"    def get_parser(self, prog_name):"},{"line_number":2463,"context_line":"        parser \u003d super(ShowServer, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_8808052d","line":2460,"range":{"start_line":2459,"start_character":8,"end_line":2460,"end_character":31},"in_reply_to":"3fa7e38b_996f19c3","updated":"2019-11-26 02:51:50.000000000","message":"Done","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9b7cf44f30e93f788650e26c8988c55d1536fa","unresolved":false,"context_lines":[{"line_number":2476,"context_line":"            \u0027--topology\u0027,"},{"line_number":2477,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":2478,"context_line":"            default\u003dFalse,"},{"line_number":2479,"context_line":"            help\u003d_(\u0027Display server NUMA topology information.\u0027),"},{"line_number":2480,"context_line":"        )"},{"line_number":2481,"context_line":"        return parser"},{"line_number":2482,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_992159a1","line":2479,"updated":"2019-11-20 13:48:18.000000000","message":"This should probably also mention the 2.78 microversion requirement.","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"3ce7e3636bc61073fedf266766d22459c716f39c","unresolved":false,"context_lines":[{"line_number":2476,"context_line":"            \u0027--topology\u0027,"},{"line_number":2477,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":2478,"context_line":"            default\u003dFalse,"},{"line_number":2479,"context_line":"            help\u003d_(\u0027Display server NUMA topology information.\u0027),"},{"line_number":2480,"context_line":"        )"},{"line_number":2481,"context_line":"        return parser"},{"line_number":2482,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_a3040215","line":2479,"in_reply_to":"3fa7e38b_992159a1","updated":"2019-11-26 02:51:50.000000000","message":"Done","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"363ff914d19b1d1264d27484732ef896b51d828a","unresolved":false,"context_lines":[{"line_number":2486,"context_line":"                                     parsed_args.server)"},{"line_number":2487,"context_line":""},{"line_number":2488,"context_line":"        if parsed_args.diagnostics:"},{"line_number":2489,"context_line":"            (resp, data) \u003d server.diagnostics()"},{"line_number":2490,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2491,"context_line":"                self.app.stderr.write(_("},{"line_number":2492,"context_line":"                    \"Error retrieving diagnostics data\\n\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_b9e77546","line":2489,"updated":"2019-11-20 13:52:58.000000000","message":"OK I see below that you\u0027re copying this, but this returns a tuple:\n\nhttps://review.opendev.org/#/c/670790/8/novaclient/v2/servers.py@1292\n\nserver.topology() doesn\u0027t:\n\nhttps://review.opendev.org/#/c/670790/8/novaclient/v2/servers.py@1305\n\nSo clearly this was never tested in a real environment because it wouldn\u0027t work (using --topology). And this is why unit tests are insufficient for a lot of things in OSC because they just mask how the underlying novaclient API binding code works.","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"3ce7e3636bc61073fedf266766d22459c716f39c","unresolved":false,"context_lines":[{"line_number":2486,"context_line":"                                     parsed_args.server)"},{"line_number":2487,"context_line":""},{"line_number":2488,"context_line":"        if parsed_args.diagnostics:"},{"line_number":2489,"context_line":"            (resp, data) \u003d server.diagnostics()"},{"line_number":2490,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2491,"context_line":"                self.app.stderr.write(_("},{"line_number":2492,"context_line":"                    \"Error retrieving diagnostics data\\n\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_e3d2fa33","line":2489,"in_reply_to":"3fa7e38b_b9e77546","updated":"2019-11-26 02:51:50.000000000","message":"Done","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9b7cf44f30e93f788650e26c8988c55d1536fa","unresolved":false,"context_lines":[{"line_number":2493,"context_line":"                ))"},{"line_number":2494,"context_line":"                return ({}, {})"},{"line_number":2495,"context_line":"        elif parsed_args.topology:"},{"line_number":2496,"context_line":"            if server.api_version \u003c api_versions.APIVersion(\"2.78\"):"},{"line_number":2497,"context_line":"                msg \u003d _(\"Retrieve topology information is not supported for \""},{"line_number":2498,"context_line":"                        \"--os-compute-api-version less than 2.78\")"},{"line_number":2499,"context_line":"                raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_593761e4","line":2496,"updated":"2019-11-20 13:48:18.000000000","message":"I don\u0027t see a test for this where it evaluates to True and the command raises an error.","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"3ce7e3636bc61073fedf266766d22459c716f39c","unresolved":false,"context_lines":[{"line_number":2493,"context_line":"                ))"},{"line_number":2494,"context_line":"                return ({}, {})"},{"line_number":2495,"context_line":"        elif parsed_args.topology:"},{"line_number":2496,"context_line":"            if server.api_version \u003c api_versions.APIVersion(\"2.78\"):"},{"line_number":2497,"context_line":"                msg \u003d _(\"Retrieve topology information is not supported for \""},{"line_number":2498,"context_line":"                        \"--os-compute-api-version less than 2.78\")"},{"line_number":2499,"context_line":"                raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_0050572b","line":2496,"in_reply_to":"3fa7e38b_593761e4","updated":"2019-11-26 02:51:50.000000000","message":"Done","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9b7cf44f30e93f788650e26c8988c55d1536fa","unresolved":false,"context_lines":[{"line_number":2494,"context_line":"                return ({}, {})"},{"line_number":2495,"context_line":"        elif parsed_args.topology:"},{"line_number":2496,"context_line":"            if server.api_version \u003c api_versions.APIVersion(\"2.78\"):"},{"line_number":2497,"context_line":"                msg \u003d _(\"Retrieve topology information is not supported for \""},{"line_number":2498,"context_line":"                        \"--os-compute-api-version less than 2.78\")"},{"line_number":2499,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":2500,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_192d698e","line":2497,"range":{"start_line":2497,"start_character":25,"end_line":2497,"end_character":33},"updated":"2019-11-20 13:48:18.000000000","message":"Showing","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"3ce7e3636bc61073fedf266766d22459c716f39c","unresolved":false,"context_lines":[{"line_number":2494,"context_line":"                return ({}, {})"},{"line_number":2495,"context_line":"        elif parsed_args.topology:"},{"line_number":2496,"context_line":"            if server.api_version \u003c api_versions.APIVersion(\"2.78\"):"},{"line_number":2497,"context_line":"                msg \u003d _(\"Retrieve topology information is not supported for \""},{"line_number":2498,"context_line":"                        \"--os-compute-api-version less than 2.78\")"},{"line_number":2499,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":2500,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_63128a5a","line":2497,"range":{"start_line":2497,"start_character":25,"end_line":2497,"end_character":33},"in_reply_to":"3fa7e38b_192d698e","updated":"2019-11-26 02:51:50.000000000","message":"Done","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9b7cf44f30e93f788650e26c8988c55d1536fa","unresolved":false,"context_lines":[{"line_number":2498,"context_line":"                        \"--os-compute-api-version less than 2.78\")"},{"line_number":2499,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":2500,"context_line":""},{"line_number":2501,"context_line":"            (resp, data) \u003d server.topology()"},{"line_number":2502,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2503,"context_line":"                self.app.stderr.write(_("},{"line_number":2504,"context_line":"                    \"Error retrieving NUMA topology data\\n\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_593c41be","line":2501,"range":{"start_line":2501,"start_character":12,"end_line":2501,"end_character":25},"updated":"2019-11-20 13:48:18.000000000","message":"Is this correct? The novaclient code returns a DictWithMeta, not a tuple.\n\nThere is also no test for this negative case.","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"3ce7e3636bc61073fedf266766d22459c716f39c","unresolved":false,"context_lines":[{"line_number":2498,"context_line":"                        \"--os-compute-api-version less than 2.78\")"},{"line_number":2499,"context_line":"                raise exceptions.CommandError(msg)"},{"line_number":2500,"context_line":""},{"line_number":2501,"context_line":"            (resp, data) \u003d server.topology()"},{"line_number":2502,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2503,"context_line":"                self.app.stderr.write(_("},{"line_number":2504,"context_line":"                    \"Error retrieving NUMA topology data\\n\""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_fb8ccc80","line":2501,"range":{"start_line":2501,"start_character":12,"end_line":2501,"end_character":25},"in_reply_to":"3fa7e38b_593c41be","updated":"2019-11-26 02:51:50.000000000","message":"Done","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9b7cf44f30e93f788650e26c8988c55d1536fa","unresolved":false,"context_lines":[{"line_number":2501,"context_line":"            (resp, data) \u003d server.topology()"},{"line_number":2502,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2503,"context_line":"                self.app.stderr.write(_("},{"line_number":2504,"context_line":"                    \"Error retrieving NUMA topology data\\n\""},{"line_number":2505,"context_line":"                ))"},{"line_number":2506,"context_line":"                return ({}, {})"},{"line_number":2507,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_f9440d4a","line":2504,"updated":"2019-11-20 13:48:18.000000000","message":"Why not include the resp text for the error? If the user hits this, what can they do? Re-run with --debug?","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"},{"author":{"_account_id":7543,"name":"Yongli He","email":"yongli.he@intel.com","username":"yongli.he"},"change_message_id":"3ce7e3636bc61073fedf266766d22459c716f39c","unresolved":false,"context_lines":[{"line_number":2501,"context_line":"            (resp, data) \u003d server.topology()"},{"line_number":2502,"context_line":"            if not resp.status_code \u003d\u003d 200:"},{"line_number":2503,"context_line":"                self.app.stderr.write(_("},{"line_number":2504,"context_line":"                    \"Error retrieving NUMA topology data\\n\""},{"line_number":2505,"context_line":"                ))"},{"line_number":2506,"context_line":"                return ({}, {})"},{"line_number":2507,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_03d63628","line":2504,"in_reply_to":"3fa7e38b_f9440d4a","updated":"2019-11-26 02:51:50.000000000","message":"Done","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"}],"openstackclient/tests/unit/compute/v2/test_server.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5f9b7cf44f30e93f788650e26c8988c55d1536fa","unresolved":false,"context_lines":[{"line_number":4590,"context_line":"        self.assertEqual((\u0027test\u0027,), data)"},{"line_number":4591,"context_line":""},{"line_number":4592,"context_line":"    def test_show_topology(self):"},{"line_number":4593,"context_line":"        self.server.api_version \u003d 2.78"},{"line_number":4594,"context_line":""},{"line_number":4595,"context_line":"        expect \u003d ["},{"line_number":4596,"context_line":"            {\u0027vcpu_set\u0027: [0, 1]},"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_b974559d","line":4593,"updated":"2019-11-20 13:48:18.000000000","message":"You don\u0027t have a test where the user tries to get --topology but on a lower microversion.","commit_id":"44a00fd735024437ee82a1475a085fbc9c9e9036"}]}
