)]}'
{"tempest/api/compute/base.py":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"3f0cd38ef3855b5a603db8a0f1d6539c8c85ddeb","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                                          \u0027ACTIVE\u0027)"},{"line_number":146,"context_line":"            except Exception as exc:"},{"line_number":147,"context_line":"                LOG.exception(exc)"},{"line_number":148,"context_line":"                cls.servers_client.unlock_server(cls.server_id)"},{"line_number":149,"context_line":"                cls.servers_client.delete_server(cls.server_id)"},{"line_number":150,"context_line":"                cls.servers_client.wait_for_server_termination(cls.server_id)"},{"line_number":151,"context_line":"                cls.server_id \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_db1dbd10","line":148,"updated":"2015-06-29 12:05:04.000000000","message":"What happens if we try to unlock non-locked server? If nothing, I am OK with this change.","commit_id":"cdf76f613e1e1e7470d9db72a19d1eb2ebcf38b1"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"55b7715d20370e117a9870215255512ab6fafb1a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                                          \u0027ACTIVE\u0027)"},{"line_number":146,"context_line":"            except Exception as exc:"},{"line_number":147,"context_line":"                LOG.exception(exc)"},{"line_number":148,"context_line":"                cls.servers_client.unlock_server(cls.server_id)"},{"line_number":149,"context_line":"                cls.servers_client.delete_server(cls.server_id)"},{"line_number":150,"context_line":"                cls.servers_client.wait_for_server_termination(cls.server_id)"},{"line_number":151,"context_line":"                cls.server_id \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_06818c4a","line":148,"in_reply_to":"ba3cc151_bb547954","updated":"2015-06-29 12:19:48.000000000","message":"Thanks.","commit_id":"cdf76f613e1e1e7470d9db72a19d1eb2ebcf38b1"},{"author":{"_account_id":14743,"name":"Viktor Tikkanen","email":"viktor.tikkanen@nokia.com","username":"vitikkan"},"change_message_id":"07d4999559763b2492d23e47a7842ab4697e7020","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                                          \u0027ACTIVE\u0027)"},{"line_number":146,"context_line":"            except Exception as exc:"},{"line_number":147,"context_line":"                LOG.exception(exc)"},{"line_number":148,"context_line":"                cls.servers_client.unlock_server(cls.server_id)"},{"line_number":149,"context_line":"                cls.servers_client.delete_server(cls.server_id)"},{"line_number":150,"context_line":"                cls.servers_client.wait_for_server_termination(cls.server_id)"},{"line_number":151,"context_line":"                cls.server_id \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_bb547954","line":148,"in_reply_to":"ba3cc151_db1dbd10","updated":"2015-06-29 12:12:34.000000000","message":"Seems to be allowed by nova:\n\n[root@controller-1 wrsroot(keystone_admin)]# nova list\n+--------------------------------------+-----------+--------+------------+-------------+---------------------------+\n| ID                                   | Name      | Status | Task State | Power State | Networks                  |\n+--------------------------------------+-----------+--------+------------+-------------+---------------------------+\n| cc84832f-73df-4620-b333-96a40c7797b4 | cirros_01 | ACTIVE | -          | Running     | vm-mgmt-net0\u003d192.168.1.35 |\n+--------------------------------------+-----------+--------+------------+-------------+---------------------------+\n[root@controller-1 wrsroot(keystone_admin)]# nova lock cc84832f-73df-4620-b333-96a40c7797b4\n[root@controller-1 wrsroot(keystone_admin)]# nova unlock cc84832f-73df-4620-b333-96a40c7797b4\n[root@controller-1 wrsroot(keystone_admin)]# nova unlock cc84832f-73df-4620-b333-96a40c7797b4\n[root@controller-1 wrsroot(keystone_admin)]# nova unlock cc84832f-73df-4620-b333-96a40c7797b4\n[root@controller-1 wrsroot(keystone_admin)]# nova delete cc84832f-73df-4620-b333-96a40c7797b4\nRequest to delete server cc84832f-73df-4620-b333-96a40c7797b4 has been accepted.\n[root@controller-1 wrsroot(keystone_admin)]#","commit_id":"cdf76f613e1e1e7470d9db72a19d1eb2ebcf38b1"}],"tempest/api/compute/servers/test_server_actions.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"32d309911bcf1eb1695febaf7b776fb583bdd058","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        try:"},{"line_number":455,"context_line":"            self.assertRaises(lib_exc.Conflict,"},{"line_number":456,"context_line":"                              self.servers_client.stop, self.server_id)"},{"line_number":457,"context_line":"        except testtools.matchers._impl.MismatchError as exc:"},{"line_number":458,"context_line":"            # Ensure that the server is cleaned if assert fails"},{"line_number":459,"context_line":"            self.servers_client.unlock_server(self.server_id)"},{"line_number":460,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_bc1f85b6","line":457,"updated":"2015-07-06 10:21:25.000000000","message":"If you don\"t do anything specific with the exception \"exc\" you don\"t need the \u0027..as exc\u0027 statement.","commit_id":"be943b804a2a1dd526c520c663420f78009817f7"},{"author":{"_account_id":14743,"name":"Viktor Tikkanen","email":"viktor.tikkanen@nokia.com","username":"vitikkan"},"change_message_id":"678a6ba9f33259052a430dd89077a20f3d1d2237","unresolved":false,"context_lines":[{"line_number":454,"context_line":"        try:"},{"line_number":455,"context_line":"            self.assertRaises(lib_exc.Conflict,"},{"line_number":456,"context_line":"                              self.servers_client.stop, self.server_id)"},{"line_number":457,"context_line":"        except testtools.matchers._impl.MismatchError as exc:"},{"line_number":458,"context_line":"            # Ensure that the server is cleaned if assert fails"},{"line_number":459,"context_line":"            self.servers_client.unlock_server(self.server_id)"},{"line_number":460,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_2b924958","line":457,"in_reply_to":"ba3cc151_bc1f85b6","updated":"2015-07-07 11:30:26.000000000","message":"Done","commit_id":"be943b804a2a1dd526c520c663420f78009817f7"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"6df73e871ae26a82a0b510e2cb6ef7a3e9ddbe28","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            self.servers_client.unlock_server(self.server_id)"},{"line_number":460,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":461,"context_line":"                                                       \u0027SHUTOFF\u0027)"},{"line_number":462,"context_line":"            self.servers_client.start(self.server_id)"},{"line_number":463,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":464,"context_line":"                                                       \u0027ACTIVE\u0027)"},{"line_number":465,"context_line":"            raise exc"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_7e928df7","line":462,"updated":"2015-07-03 06:17:29.000000000","message":"Why do we need to start the server here again? Wouldn\u0027t L468 (simple unlocking) fix the main issue? I would like to keep it short since it\u0027s just a failure cleanup.","commit_id":"be943b804a2a1dd526c520c663420f78009817f7"},{"author":{"_account_id":14743,"name":"Viktor Tikkanen","email":"viktor.tikkanen@nokia.com","username":"vitikkan"},"change_message_id":"19023fd9a9ba71118e03d5141ded10f3ef6e6bed","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            self.servers_client.unlock_server(self.server_id)"},{"line_number":460,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":461,"context_line":"                                                       \u0027SHUTOFF\u0027)"},{"line_number":462,"context_line":"            self.servers_client.start(self.server_id)"},{"line_number":463,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":464,"context_line":"                                                       \u0027ACTIVE\u0027)"},{"line_number":465,"context_line":"            raise exc"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_99a76ba6","line":462,"in_reply_to":"ba3cc151_7e928df7","updated":"2015-07-03 06:49:33.000000000","message":"Simple unlocking will fix the issue only partly: tearDown will be able to delete the server but only after 180 sec of waiting (since the server will never reach ACTIVE status). If we start the server here, it will be treated as \"clean\" and could be reused by another tests.","commit_id":"be943b804a2a1dd526c520c663420f78009817f7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"32d309911bcf1eb1695febaf7b776fb583bdd058","unresolved":false,"context_lines":[{"line_number":462,"context_line":"            self.servers_client.start(self.server_id)"},{"line_number":463,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":464,"context_line":"                                                       \u0027ACTIVE\u0027)"},{"line_number":465,"context_line":"            raise exc"},{"line_number":466,"context_line":"        except Exception as exc:"},{"line_number":467,"context_line":"            # Ensure that the server is unlocked if stop fails"},{"line_number":468,"context_line":"            self.servers_client.unlock_server(self.server_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_3c43756e","line":465,"updated":"2015-07-06 10:21:25.000000000","message":"You should just use the \"raise\" statement here, otherwise when you use raise exc, we lose the traceback.","commit_id":"be943b804a2a1dd526c520c663420f78009817f7"},{"author":{"_account_id":14743,"name":"Viktor Tikkanen","email":"viktor.tikkanen@nokia.com","username":"vitikkan"},"change_message_id":"678a6ba9f33259052a430dd89077a20f3d1d2237","unresolved":false,"context_lines":[{"line_number":462,"context_line":"            self.servers_client.start(self.server_id)"},{"line_number":463,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":464,"context_line":"                                                       \u0027ACTIVE\u0027)"},{"line_number":465,"context_line":"            raise exc"},{"line_number":466,"context_line":"        except Exception as exc:"},{"line_number":467,"context_line":"            # Ensure that the server is unlocked if stop fails"},{"line_number":468,"context_line":"            self.servers_client.unlock_server(self.server_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_eb9b0171","line":465,"in_reply_to":"ba3cc151_3c43756e","updated":"2015-07-07 11:30:26.000000000","message":"Done","commit_id":"be943b804a2a1dd526c520c663420f78009817f7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8e062079e5188cdbfe45bb78bc0a7668a98afa96","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                                                       \u0027SHUTOFF\u0027)"},{"line_number":462,"context_line":"            self.servers_client.start(self.server_id)"},{"line_number":463,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":464,"context_line":"                                                       \u0027ACTIVE\u0027)"},{"line_number":465,"context_line":"            raise"},{"line_number":466,"context_line":"        except Exception:"},{"line_number":467,"context_line":"            # Ensure that the server is unlocked if stop fails"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_89c2af83","line":464,"updated":"2015-07-16 10:51:21.000000000","message":"I did not get much benefit of waiting for server state and try to restart here.\n\nserver stop call(L456) will raise wither Conflict(for server not ready, invalid state, or locked ) or 500 if something very bad happened with server. So in case of 500 where MismatchError will occur, it will be very less chance to have server in good shape (shutoff or restart) .\n\nI will prefer if we just unlock the server lock state and leave other thing for teardown and setup (as mentioned by mkoderer).\n\nsetup will prepare the clean server for other tests.\n\nHow about something- \n\n       self.servers_client.lock_server(self.server_id)\n       try:\n           server \u003d self.servers_client.show_server(self.server_id)\n           self.assertEqual(server[\u0027status\u0027], \u0027ACTIVE\u0027)\n           # Locked server is not allowed to be stopped by non-admin user\n           self.assertRaises(lib_exc.Conflict,\n                            self.servers_client.stop, self.server_id)\n       except Exception:\n           self.servers_client.unlock_server(self.server_id)\n           raise\n       self.servers_client.unlock_server(self.server_id)\n\nSo that anything happened from lock request to unlock one (L451 till L470), we make server unlock.","commit_id":"c39226940ec8b09f0ebdd1bd42451152a537b2e4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ef35fc3cdae061bb855693abab27b3a78ccc6b16","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                                                       \u0027SHUTOFF\u0027)"},{"line_number":462,"context_line":"            self.servers_client.start(self.server_id)"},{"line_number":463,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":464,"context_line":"                                                       \u0027ACTIVE\u0027)"},{"line_number":465,"context_line":"            raise"},{"line_number":466,"context_line":"        except Exception:"},{"line_number":467,"context_line":"            # Ensure that the server is unlocked if stop fails"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_7b87c312","line":464,"in_reply_to":"9a41bdd9_3730839e","updated":"2015-07-17 03:17:38.000000000","message":"but my concern is MismatchError will happen only if something bad happened (In normal, Stop call expected to throw Conflict exception), in that case waiting for SHUTOFF status will also delay 180 sec.\n\nIn your testing where you got MismatchError, does server goes to SHUTOFF state or timeout happens (at L460)?","commit_id":"c39226940ec8b09f0ebdd1bd42451152a537b2e4"},{"author":{"_account_id":14743,"name":"Viktor Tikkanen","email":"viktor.tikkanen@nokia.com","username":"vitikkan"},"change_message_id":"dc48b3f47596cd6d871c1b24346083d0bc5d5d23","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                                                       \u0027SHUTOFF\u0027)"},{"line_number":462,"context_line":"            self.servers_client.start(self.server_id)"},{"line_number":463,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":464,"context_line":"                                                       \u0027ACTIVE\u0027)"},{"line_number":465,"context_line":"            raise"},{"line_number":466,"context_line":"        except Exception:"},{"line_number":467,"context_line":"            # Ensure that the server is unlocked if stop fails"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_cd9407ea","line":464,"in_reply_to":"9a41bdd9_7b87c312","updated":"2015-07-17 10:38:41.000000000","message":"Yes, it goes to SHUTOFF state. Below is the test result with code from Patch Set 7 (no timeouts):\n\n[root@vm-tempest tempest]# ./run_tempest.sh test_lock_unlock_server\nrunning\u003dOS_STDOUT_CAPTURE\u003d${OS_STDOUT_CAPTURE:-1} \\\nOS_STDERR_CAPTURE\u003d${OS_STDERR_CAPTURE:-1} \\\nOS_TEST_TIMEOUT\u003d${OS_TEST_TIMEOUT:-500} \\\nOS_TEST_LOCK_PATH\u003d${OS_TEST_LOCK_PATH:-${TMPDIR:-\u0027/tmp\u0027}} \\\n${PYTHON:-python} -m subunit.run discover -t ${OS_TOP_LEVEL:-./} ${OS_TEST_PATH:-./tempest/test_discover} --list\nrunning\u003dOS_STDOUT_CAPTURE\u003d${OS_STDOUT_CAPTURE:-1} \\\nOS_STDERR_CAPTURE\u003d${OS_STDERR_CAPTURE:-1} \\\nOS_TEST_TIMEOUT\u003d${OS_TEST_TIMEOUT:-500} \\\nOS_TEST_LOCK_PATH\u003d${OS_TEST_LOCK_PATH:-${TMPDIR:-\u0027/tmp\u0027}} \\\n${PYTHON:-python} -m subunit.run discover -t ${OS_TOP_LEVEL:-./} ${OS_TEST_PATH:-./tempest/test_discover}  --load-list /tmp/tmpQ0l_gl\ntempest.api.compute.servers.test_server_actions.ServerActionsTestJSON\n    test_lock_unlock_server[id-80a8094c-211e-440a-ab88-9e59d556c7ee]  FAIL\n\nSlowest 1 tests took 88.42 secs:\ntempest.api.compute.servers.test_server_actions.ServerActionsTestJSON\n    test_lock_unlock_server[id-80a8094c-211e-440a-ab88-9e59d556c7ee]      88.42\n\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFAIL: tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_lock_unlock_server[id-80a8094c-211e-440a-ab88-9e59d556c7ee]\n----------------------------------------------------------------------\nTraceback (most recent call last):\ntesttools.testresult.real._StringException: Empty attachments:\n  pythonlogging:\u0027\u0027\n  stderr\n  stdout\n\nTraceback (most recent call last):\n  File \"/opt/tempest/tempest/api/compute/servers/test_server_actions.py\", line 463, in test_lock_unlock_server\n    raise exc\ntesttools.matchers._impl.MismatchError: \u003cbound method ServersClientJSON.stop of \u003ctempest.services.compute.json.servers_client.ServersClientJSON object at 0x42d5fd0\u003e\u003e returned {}\n\n\nRan 1 test in 110.394s\n\nFAILED (failures\u003d1)\n[root@vm-tempest tempest]#","commit_id":"c39226940ec8b09f0ebdd1bd42451152a537b2e4"},{"author":{"_account_id":14743,"name":"Viktor Tikkanen","email":"viktor.tikkanen@nokia.com","username":"vitikkan"},"change_message_id":"6d9b2207b00bc07846a6a21b93385d3cf14f21e9","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                                                       \u0027SHUTOFF\u0027)"},{"line_number":462,"context_line":"            self.servers_client.start(self.server_id)"},{"line_number":463,"context_line":"            self.servers_client.wait_for_server_status(self.server_id,"},{"line_number":464,"context_line":"                                                       \u0027ACTIVE\u0027)"},{"line_number":465,"context_line":"            raise"},{"line_number":466,"context_line":"        except Exception:"},{"line_number":467,"context_line":"            # Ensure that the server is unlocked if stop fails"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a41bdd9_3730839e","line":464,"in_reply_to":"9a41bdd9_89c2af83","updated":"2015-07-16 17:40:20.000000000","message":"Actually I\u0027ve got a real case where stop call returns 200 (but later delete fails) so the intention was to handle this case failure in a nice way (just FAIL wih reported MismatchError).\n\nThe code proposed by you is indeed simplier and will probably work as well but it will cause 180 sec delay and extra error logs since tearDown will wait for ACTIVE status.\n\nPlease confirm if you still prefer simple unlock solution (I need to test it first in my environment when I will be back from summer vacation :)","commit_id":"c39226940ec8b09f0ebdd1bd42451152a537b2e4"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"4fae6e984389eee1903ca0a55ab16832ff7580b3","unresolved":false,"context_lines":[{"line_number":480,"context_line":"        try:"},{"line_number":481,"context_line":"            self.assertRaises(lib_exc.Conflict,"},{"line_number":482,"context_line":"                              self.client.stop, self.server_id)"},{"line_number":483,"context_line":"        except testtools.matchers._impl.MismatchError:"},{"line_number":484,"context_line":"            # Ensure that the server is cleaned if assert fails"},{"line_number":485,"context_line":"            self.client.unlock_server(self.server_id)"},{"line_number":486,"context_line":"            waiters.wait_for_server_status(self.client, self.server_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_c5647b23","line":483,"updated":"2015-07-28 08:50:42.000000000","message":"Catching an assertion exception looks ugly, especially in this case.","commit_id":"26eb4fe1e87bc09c38ff31597004a8bf60e8c3df"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"4fae6e984389eee1903ca0a55ab16832ff7580b3","unresolved":false,"context_lines":[{"line_number":491,"context_line":"            raise"},{"line_number":492,"context_line":"        except Exception:"},{"line_number":493,"context_line":"            # Ensure that the server is unlocked if stop fails"},{"line_number":494,"context_line":"            self.client.unlock_server(self.server_id)"},{"line_number":495,"context_line":"            raise"},{"line_number":496,"context_line":"        self.client.unlock_server(self.server_id)"},{"line_number":497,"context_line":"        self.client.stop(self.server_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_c5131bb7","line":494,"updated":"2015-07-28 08:50:42.000000000","message":"This line can raise exception and the original exception would be overwritten.","commit_id":"26eb4fe1e87bc09c38ff31597004a8bf60e8c3df"}]}
