Commit 544271d9 authored by Yusuke Sato's avatar Yusuke Sato Committed by Commit Bot

arcvm: Detect vm_concierge crash and restart ARCVM

BUG=b:142141480
TEST=sign in, launch play store, ssh into dut, run
 'pkill vm_concierge', launch play store again, verify
 it launches

Change-Id: Id5352795046de2e57d153b64eb75c2487d9a69ef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1845957
Commit-Queue: Yusuke Sato <yusukes@chromium.org>
Auto-Submit: Yusuke Sato <yusukes@chromium.org>
Reviewed-by: default avatarHidehiko Abe <hidehiko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#704193}
parent 193ed603
...@@ -32,11 +32,19 @@ chromeos::ConciergeClient* GetConciergeClient() { ...@@ -32,11 +32,19 @@ chromeos::ConciergeClient* GetConciergeClient() {
} // namespace } // namespace
class ArcVmClientAdapter : public ArcClientAdapter, class ArcVmClientAdapter : public ArcClientAdapter,
public chromeos::ConciergeClient::VmObserver { public chromeos::ConciergeClient::VmObserver,
public chromeos::ConciergeClient::Observer {
public: public:
ArcVmClientAdapter() { GetConciergeClient()->AddVmObserver(this); } ArcVmClientAdapter() {
auto* client = GetConciergeClient();
client->AddVmObserver(this);
client->AddObserver(this);
}
~ArcVmClientAdapter() override { ~ArcVmClientAdapter() override {
GetConciergeClient()->RemoveVmObserver(this); auto* client = GetConciergeClient();
client->RemoveObserver(this);
client->RemoveVmObserver(this);
} }
// chromeos::ConciergeClient::VmObserver overrides: // chromeos::ConciergeClient::VmObserver overrides:
...@@ -95,6 +103,8 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -95,6 +103,8 @@ class ArcVmClientAdapter : public ArcClientAdapter,
void StopArcInstance() override { void StopArcInstance() override {
VLOG(1) << "Stopping arcvm"; VLOG(1) << "Stopping arcvm";
// TODO(yusukes): This method should eventually call ArcInstanceStopped()
// even when only the (yet nonexistent) 'mini' VM is running.
std::vector<std::string> env{{"USER_ID_HASH=" + user_id_hash_}}; std::vector<std::string> env{{"USER_ID_HASH=" + user_id_hash_}};
chromeos::UpstartClient::Get()->StopJob( chromeos::UpstartClient::Get()->StopJob(
"arcvm", env, "arcvm", env,
...@@ -107,6 +117,16 @@ class ArcVmClientAdapter : public ArcClientAdapter, ...@@ -107,6 +117,16 @@ class ArcVmClientAdapter : public ArcClientAdapter,
user_id_hash_ = hash; user_id_hash_ = hash;
} }
// chromeos::ConciergeClient::Observer overrides:
void ConciergeServiceStopped() override {
VLOG(1) << "vm_concierge stopped";
// At this point, all crosvm processes are gone. Notify the observer of the
// event.
OnArcInstanceStopped();
}
void ConciergeServiceRestarted() override {}
private: private:
void OnArcInstanceStopped() { void OnArcInstanceStopped() {
VLOG(1) << "arcvm stopped."; VLOG(1) << "arcvm stopped.";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment