Virtual machine (VM) dapat ditangguhkan, dilanjutkan, di-reboot, dan dimatikan. Jika salah satu peristiwa ini terjadi, penayang, pelanggan, klien RPC, dan server RPC akan terpengaruh. Gambar 1 menunjukkan siklus proses paket layanan:
Gambar 1. Siklus proses paket layanan.
Siklus proses paket layanan mengikuti urutan ini:
- Metode
newdipanggil untuk membuat paket layanan. - Pengelola siklus proses memulai paket layanan dan, bergantung pada setelan
dalam konfigurasi orkestrasi, memanggil
on_start. - Saat VM berhenti atau ditangguhkan dan, bergantung pada setelan dalam
konfigurasi orkestrasi, pengelola siklus proses memanggil
on_stop. Fungsion_stopharus menghentikan thread untuk penerbit, pelanggan, klien RPC, dan server RPC. - Saat VM dilanjutkan,
on_startdapat membuat ulang thread jika paket layanan dikonfigurasi untuk dimulai lagi oleh konfigurasi orkestrasi.
Membuat konfigurasi untuk menangani penangguhan dan pelanjutan
Contoh berikut menunjukkan konfigurasi untuk menangani penangguhan dan melanjutkan:
# Start `auto_start` service bundles when system is started.
state {
condition {
or {
power_state: "ON"
power_state: "POWER_OFF_EXIT"
power_state: "SUSPEND_TO_RAM_EXIT"
}
}
groups_states { started: "auto_start" }
}
# Stop `auto_start` service bundles when system is suspending to RAM.
state {
condition {
or {
power_state: "SUSPEND_TO_RAM_ENTER"
power_state: "WAIT_FOR_FINISH"
power_state: "SUSPEND_TO_RAM_POST_FINISH"
}
}
groups_states { created: "auto_start" }
}
Dengan:
WAIT_FOR_FINISHadalah status daya terakhir yang diharapkan oleh paket layanan agar agen kendaraan software-defined (SDV) merespons.SUSPEND_TO_RAM_POST_FINISHmenunjukkan bahwa agen SDV mungkin menutup atau menangguhkan koneksi agar dapat memulihkannya dengan andal saat dilanjutkan. Anda tidak boleh mengandalkanSUSPEND_TO_RAM_POST_FINISHatauPOWER_OFF_POST_FINISHuntuk memanggilonStopdalam penerapan paket layanan, tetapi mengandalkanSUSPEND_TO_RAM_ENTER,POWER_OFF_ENTER, danWAIT_FOR_FINISH.
Menentukan ketersediaan layanan
Contoh berikut menunjukkan cara menggunakan API middleware di paket layanan Anda untuk menentukan apakah unit layanan tersedia:
let mut registration_event_stream = sdv::mw::clientlib::create_server_registration_event_stream(
sdv_comms,
// Descriptor of type sdv::mw::clientlib::rpc_descriptor::client::Descriptor
// that binds a specific RPC client type to a communication channel.
client_descriptor,
)
.await
.expect("unable to generate a registration event");
match registration_event_stream.next().await {
Some(sdv::mw::Availability::Available) => {
info!("{unit_name} became Available.");
// Create client/subscriber
}
Some(sdv::mw::Availability::Unavailable) => {
info!("{unit_name} became Unavailable.");
// Destroy client/subscriber
}
None => {
warn!("Registration event stream for {unit_name} terminated.
Stopping monitoring for this variant.");
}
}
create_server_registration_event_stream adalah API middleware yang digunakan untuk membuat peristiwa yang disebut unit_name. Aliran peristiwa pendaftaran ini akan diberi tahu
saat unit layanan tersedia.