Timeout for VM start
This prevent the terminal from hanging forever when it somehow fails to
connect to the VM.
Bug: 400197809
Bug: 400906513
Test: relace the timeout value to a small number (2 sec), and observe
that the error activity pops up.
Change-Id: Iea871eaa766bcfa718ab22dcc7d7f2ce01069fac
Change-Id: Ibf26ea68dde43922dcc908f00d02d87ebc338897
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
index 345e8dd..94b7011 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
@@ -63,6 +63,7 @@
import java.util.concurrent.CompletableFuture
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
+import java.util.concurrent.TimeUnit
class VmLauncherService : Service() {
inner class VmLauncherServiceBinder : android.os.Binder() {
@@ -246,6 +247,15 @@
},
executorService,
)
+ .exceptionallyAsync(
+ { e ->
+ Log.e(TAG, "Failed to start VM", e)
+ resultReceiver!!.send(RESULT_ERROR, null)
+ stopSelf()
+ null
+ },
+ executorService,
+ )
return START_NOT_STICKY
}
@@ -282,6 +292,8 @@
}
},
)
+
+ resolvedInfo.orTimeout(VM_BOOT_TIMEOUT_SECONDS.toLong(), TimeUnit.SECONDS)
return resolvedInfo
}
@@ -467,6 +479,8 @@
private const val KEY_TERMINAL_IPADDRESS = "address"
private const val KEY_TERMINAL_PORT = "port"
+ private const val VM_BOOT_TIMEOUT_SECONDS = 20
+
private const val INITIAL_MEM_BALLOON_PERCENT = 10
private const val MAX_MEM_BALLOON_PERCENT = 50
private const val MEM_BALLOON_INFLATE_INTERVAL_MILLIS = 60000L