Menangani penangguhan dan kelanjutan

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:

Siklus proses paket layanan

Gambar 1. Siklus proses paket layanan.

Siklus proses paket layanan mengikuti urutan ini:

  1. Metode new dipanggil untuk membuat paket layanan.
  2. Pengelola siklus proses memulai paket layanan dan, bergantung pada setelan dalam konfigurasi orkestrasi, memanggil on_start.
  3. Saat VM berhenti atau ditangguhkan dan, bergantung pada setelan dalam konfigurasi orkestrasi, pengelola siklus proses memanggil on_stop. Fungsi on_stop harus menghentikan thread untuk penerbit, pelanggan, klien RPC, dan server RPC.
  4. Saat VM dilanjutkan, on_start dapat 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_FINISH adalah status daya terakhir yang diharapkan oleh paket layanan agar agen kendaraan software-defined (SDV) merespons.
  • SUSPEND_TO_RAM_POST_FINISH menunjukkan bahwa agen SDV mungkin menutup atau menangguhkan koneksi agar dapat memulihkannya dengan andal saat dilanjutkan. Anda tidak boleh mengandalkan SUSPEND_TO_RAM_POST_FINISH atau POWER_OFF_POST_FINISH untuk memanggil onStop dalam penerapan paket layanan, tetapi mengandalkan SUSPEND_TO_RAM_ENTER, POWER_OFF_ENTER, dan WAIT_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.