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() {
} // namespace
class ArcVmClientAdapter : public ArcClientAdapter,
public chromeos::ConciergeClient::VmObserver {
public chromeos::ConciergeClient::VmObserver,
public chromeos::ConciergeClient::Observer {
public:
ArcVmClientAdapter() { GetConciergeClient()->AddVmObserver(this); }
ArcVmClientAdapter() {
auto* client = GetConciergeClient();
client->AddVmObserver(this);
client->AddObserver(this);
}
~ArcVmClientAdapter() override {
GetConciergeClient()->RemoveVmObserver(this);
auto* client = GetConciergeClient();
client->RemoveObserver(this);
client->RemoveVmObserver(this);
}
// chromeos::ConciergeClient::VmObserver overrides:
......@@ -95,6 +103,8 @@ class ArcVmClientAdapter : public ArcClientAdapter,
void StopArcInstance() override {
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_}};
chromeos::UpstartClient::Get()->StopJob(
"arcvm", env,
......@@ -107,6 +117,16 @@ class ArcVmClientAdapter : public ArcClientAdapter,
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:
void OnArcInstanceStopped() {
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