)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5dd142939c21da117c1530a980d835246dc84382","unresolved":false,"context_lines":[{"line_number":10,"context_line":"server API. Increased API microversion to v2.34 to maintain"},{"line_number":11,"context_line":"backward compatibility."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"APIImpact: Return 400 status code if user(admin or non admin)"},{"line_number":14,"context_line":"passes invalid status filter to the list server API."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Ed Leafe \u003ced@leafe.com\u003e"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"1aa78d24_ac344dde","line":14,"range":{"start_line":13,"start_character":0,"end_line":14,"end_character":52},"updated":"2016-07-03 12:58:11.000000000","message":"We don\u0027t need the APIImpact tag on the actual fix, just the spec, which is done.\n\nSo replace this with:\n\nImplements blueprint response-for-invalid-status\n\nThe REST API history and release note will provide the docs.","commit_id":"3b5a45b10ab2630d679cc9171239c5c1074eae4d"}],"nova/api/openstack/compute/extended_server_attributes.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5bb381eae2c6d758552fec53f2c6eceada92a1da","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            authorize_host_status \u003d True"},{"line_number":90,"context_line":"        if authorize_extend or authorize_host_status:"},{"line_number":91,"context_line":"            servers \u003d list(resp_obj.obj[\u0027servers\u0027])"},{"line_number":92,"context_line":"            if servers:"},{"line_number":93,"context_line":"                instances \u003d req.get_db_instances()"},{"line_number":94,"context_line":"                # Instances is guaranteed to be in the cache due to"},{"line_number":95,"context_line":"                # the core API adding it in its \u0027detail\u0027 method."},{"line_number":96,"context_line":"                if authorize_host_status:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_b7fe6a03","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":50},"updated":"2016-06-04 03:33:38.000000000","message":"When I saw this change, I guessed current code didn\u0027t seem problematic, empty list of servers makes the loop skip at line 100. However, the problem happened at line 93 like:\n\n 2016-05-09 10:42:28.653 TRACE nova.api.openstack instances \u003d req.get_db_instances()\n 2016-05-09 10:42:28.653 TRACE nova.api.openstack File \"/opt/stack/nova/nova/api/openstack/wsgi.py\", line 145, in get_db_instances\n 2016-05-09 10:42:28.653 TRACE nova.api.openstack return self.get_db_items(\u0027instances\u0027)\n 2016-05-09 10:42:28.653 TRACE nova.api.openstack File \"/opt/stack/nova/nova/api/openstack/wsgi.py\", line 128, in get_db_items\n 2016-05-09 10:42:28.653 TRACE nova.api.openstack return self._extension_data[\u0027db_items\u0027][key]\n 2016-05-09 10:42:28.653 TRACE nova.api.openstack KeyError: \u0027instances\u0027\n\nSo the code is great to fix this problem. And it would be nice to write some NOTE here to explain why we need to skip here.","commit_id":"d73e8bc01c8481f9a4bde53391521d312cd319a2"},{"author":{"_account_id":20191,"name":"Dinesh Bhor","email":"bhordinesh07@gmail.com","username":"dineshbhor"},"change_message_id":"c773eec922423aaa89d702a784ae20cc8580e97e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            authorize_host_status \u003d True"},{"line_number":90,"context_line":"        if authorize_extend or authorize_host_status:"},{"line_number":91,"context_line":"            servers \u003d list(resp_obj.obj[\u0027servers\u0027])"},{"line_number":92,"context_line":"            if servers:"},{"line_number":93,"context_line":"                instances \u003d req.get_db_instances()"},{"line_number":94,"context_line":"                # Instances is guaranteed to be in the cache due to"},{"line_number":95,"context_line":"                # the core API adding it in its \u0027detail\u0027 method."},{"line_number":96,"context_line":"                if authorize_host_status:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_c76fe090","line":93,"range":{"start_line":92,"start_character":0,"end_line":93,"end_character":50},"in_reply_to":"7aa08908_b7fe6a03","updated":"2016-06-06 10:08:24.000000000","message":"Done","commit_id":"d73e8bc01c8481f9a4bde53391521d312cd319a2"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"ab294ae6c9d6dfe9a8663c67282f774793fd73f3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            # servers list can be empty if invalid status is provided to the"},{"line_number":94,"context_line":"            # core API \u0027detail\u0027 method."},{"line_number":95,"context_line":"            if servers:"},{"line_number":96,"context_line":"                instances \u003d req.get_db_instances()"},{"line_number":97,"context_line":"                if authorize_host_status:"},{"line_number":98,"context_line":"                    host_statuses \u003d ("},{"line_number":99,"context_line":"                        self.compute_api.get_instances_host_statuses("}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_70d96583","line":96,"updated":"2016-06-06 19:11:54.000000000","message":"get_db_instances is supposed to be the set of instances where really got this far. Why isn\u0027t that an empty list?","commit_id":"d09440033b3407f39e3f55f4591044f0ad3e4e2c"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"ccda7aa0b3f0a02e6c3a75c08fbe037cb1cdbc67","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            response \u003d self._view_builder.index(req, instance_list)"},{"line_number":428,"context_line":"        # if instance list is empty don\u0027t store them in cache"},{"line_number":429,"context_line":"        if instance_list:"},{"line_number":430,"context_line":"            req.cache_db_instances(instance_list)"},{"line_number":431,"context_line":"        return response"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def _get_server(self, context, req, instance_uuid, is_detail\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_f03a7597","line":430,"updated":"2016-06-06 19:13:56.000000000","message":"this is definitely wrong, this completely exists to not go and make that call again. It should be cached as empty if that\u0027s really the result set.","commit_id":"d09440033b3407f39e3f55f4591044f0ad3e4e2c"},{"author":{"_account_id":20191,"name":"Dinesh Bhor","email":"bhordinesh07@gmail.com","username":"dineshbhor"},"change_message_id":"2afcb05180ea1219ae80a4feb9cd3dd874233ee7","unresolved":false,"context_lines":[{"line_number":427,"context_line":"            response \u003d self._view_builder.index(req, instance_list)"},{"line_number":428,"context_line":"        # if instance list is empty don\u0027t store them in cache"},{"line_number":429,"context_line":"        if instance_list:"},{"line_number":430,"context_line":"            req.cache_db_instances(instance_list)"},{"line_number":431,"context_line":"        return response"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def _get_server(self, context, req, instance_uuid, is_detail\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7aa08908_8a10955a","line":430,"in_reply_to":"7aa08908_f03a7597","updated":"2016-06-14 12:47:10.000000000","message":"Done","commit_id":"d09440033b3407f39e3f55f4591044f0ad3e4e2c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f152ce8d31917965c9db6e4f8e764209f985af8d","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            vm_state, task_state \u003d states"},{"line_number":229,"context_line":"            if not vm_state and not task_state:"},{"line_number":230,"context_line":"                if api_version_request.is_supported(req, min_version\u003d\u00272.38\u0027):"},{"line_number":231,"context_line":"                    msg \u003d _(\u0027Invalid status value\u0027)"},{"line_number":232,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"                return {\u0027servers\u0027: []}"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_98ec0ec9","line":231,"updated":"2016-08-20 14:36:35.000000000","message":"Is there any way from the API today to tell what the set of valid status values are? If not, we should consider returning that set in this error message.\n\nI guess it is in the docs so returning the valid list is probably not necessary:\n\nhttp://developer.openstack.org/api-ref/compute/?expanded\u003dlist-servers-detail#list-servers\n\nI was originally thinking this change should update the api-ref, because microversions usually require that, but I don\u0027t really know what we\u0027d say. We could say, after microversion 2.37 trying to list servers with an invalid status value results in a 400, but that should just be implied since the docs tell you what the valid status values are, if you pass \u0027foo\u0027 you should expect a failure.","commit_id":"984d00919ffe5ac5d41edb194740f6f33ca3e78f"}],"nova/tests/unit/api/openstack/compute/test_serversV21.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f152ce8d31917965c9db6e4f8e764209f985af8d","unresolved":false,"context_lines":[{"line_number":1501,"context_line":"                          self.controller.detail, req)"},{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":"    def test_list_servers_detail_invalid_status_for_admin(self):"},{"line_number":1504,"context_line":"        self._test_invalid_status(True)"},{"line_number":1505,"context_line":""},{"line_number":1506,"context_line":"    def test_list_servers_detail_invalid_status_for_non_admin(self):"},{"line_number":1507,"context_line":"        self._test_invalid_status(False)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ac06dbe_f8ca624e","line":1504,"range":{"start_line":1504,"start_character":34,"end_line":1504,"end_character":38},"updated":"2016-08-20 14:36:35.000000000","message":"nit: I like to see kwargs used when passing booleans around in unit tests. It improves readability.","commit_id":"984d00919ffe5ac5d41edb194740f6f33ca3e78f"}]}
