virtualizationservice: lazy-load ApexInfoList
Loading ApexInfoList can't be used to initialize VirtualizationService
because when it fails VirtualizationService enters into infinite loop
due to service restart.
Now it is loaded lazily.
Bug: 192892281
Test: MicrodroidHostTestCases
Change-Id: I3c082d200549c348ff8fa03ff25ca73f9fb694cd
diff --git a/virtualizationservice/src/aidl.rs b/virtualizationservice/src/aidl.rs
index dc22e99..bc1761b 100644
--- a/virtualizationservice/src/aidl.rs
+++ b/virtualizationservice/src/aidl.rs
@@ -16,7 +16,7 @@
use crate::composite::make_composite_image;
use crate::crosvm::{CrosvmConfig, DiskFile, VmInstance};
-use crate::payload::{make_payload_disk, ApexInfoList};
+use crate::payload::make_payload_disk;
use crate::{Cid, FIRST_GUEST_CID};
use android_system_virtualizationservice::aidl::android::system::virtualizationservice::IVirtualizationService::IVirtualizationService;
@@ -62,19 +62,9 @@
["com.android.adbd", "com.android.i18n", "com.android.os.statsd", "com.android.sdkext"];
/// Implementation of `IVirtualizationService`, the entry point of the AIDL service.
-#[derive(Debug)]
+#[derive(Debug, Default)]
pub struct VirtualizationService {
state: Mutex<State>,
- apex_info_list: ApexInfoList,
-}
-
-impl VirtualizationService {
- pub fn new() -> Result<VirtualizationService> {
- Ok(VirtualizationService {
- state: Default::default(),
- apex_info_list: ApexInfoList::load()?,
- })
- }
}
impl Interface for VirtualizationService {}
@@ -119,15 +109,13 @@
let config = match config {
VirtualMachineConfig::AppConfig(config) => BorrowedOrOwned::Owned(
- load_app_config(&self.apex_info_list, config, &temporary_directory).map_err(
- |e| {
- error!("Failed to load app config from {}: {}", &config.configPath, e);
- new_binder_exception(
- ExceptionCode::SERVICE_SPECIFIC,
- format!("Failed to load app config from {}: {}", &config.configPath, e),
- )
- },
- )?,
+ load_app_config(config, &temporary_directory).map_err(|e| {
+ error!("Failed to load app config from {}: {}", &config.configPath, e);
+ new_binder_exception(
+ ExceptionCode::SERVICE_SPECIFIC,
+ format!("Failed to load app config from {}: {}", &config.configPath, e),
+ )
+ })?,
),
VirtualMachineConfig::RawConfig(config) => BorrowedOrOwned::Borrowed(config),
};
@@ -298,7 +286,6 @@
}
fn load_app_config(
- apex_info_list: &ApexInfoList,
config: &VirtualMachineAppConfig,
temporary_directory: &Path,
) -> Result<VirtualMachineRawConfig> {
@@ -328,7 +315,6 @@
apexes.dedup_by(|a, b| a.name == b.name);
vm_config.disks.push(make_payload_disk(
- apex_info_list,
format!("/proc/self/fd/{}", apk_file.as_raw_fd()).into(),
format!("/proc/self/fd/{}", idsig_file.as_raw_fd()).into(),
config_path,