مدیریت تعلیق و از سرگیری

ماشین‌های مجازی (VM) می‌توانند به حالت تعلیق درآیند، از سر گرفته شوند، دوباره راه‌اندازی شوند و خاموش شوند. هنگامی که هر یک از این رویدادها رخ می‌دهد، ناشران، مشترکین، کلاینت‌های RPC و سرورهای RPC تحت تأثیر قرار می‌گیرند. شکل 1 چرخه عمر یک بسته خدماتی را نشان می‌دهد:

چرخه حیات یک بسته خدماتی

شکل ۱. چرخه حیات یک بسته خدماتی.

چرخه حیات بسته خدماتی از این توالی پیروی می‌کند:

  1. متد new برای ایجاد بسته‌ی سرویس فراخوانی می‌شود.
  2. مدیر چرخه عمر، بسته سرویس را آغاز می‌کند و بسته به تنظیمات موجود در پیکربندی ارکستراسیون، تابع on_start را فراخوانی می‌کند.
  3. وقتی ماشین مجازی متوقف یا به حالت تعلیق در می‌آید، و بسته به تنظیمات پیکربندی ارکستراسیون، مدیر چرخه عمر، on_stop را فراخوانی می‌کند. تابع on_stop باید نخ‌ها را برای ناشران، مشترکین، کلاینت‌های RPC و سرورهای RPC متوقف کند.
  4. وقتی ماشین مجازی دوباره راه‌اندازی می‌شود، اگر بسته سرویس توسط پیکربندی هماهنگ‌سازی طوری پیکربندی شده باشد که دوباره شروع به کار کند، on_start می‌تواند نخ‌ها را دوباره ایجاد کند.

ایجاد پیکربندی برای مدیریت تعلیق و از سرگیری

مثال زیر پیکربندی مربوط به مدیریت تعلیق و از سرگیری را نشان می‌دهد:

# 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" }
}

کجا:

  • WAIT_FOR_FINISH آخرین وضعیت توان مصرفی است که در آن بسته خدماتی باید انتظار داشته باشد که عامل‌های وسیله نقلیه تعریف‌شده توسط نرم‌افزار (SDV) پاسخگو باشند.
  • SUSPEND_TO_RAM_POST_FINISH نشان می‌دهد که عوامل SDV ممکن است اتصال را ببندند یا به حالت تعلیق درآورند تا بتوانند آنها را به طور قابل اعتمادی در ادامه بازیابی کنند. مهم است که برای فراخوانی onStop در پیاده‌سازی بسته سرویس، به SUSPEND_TO_RAM_POST_FINISH یا POWER_OFF_POST_FINISH تکیه نکنید و در عوض، به SUSPEND_TO_RAM_ENTER ، POWER_OFF_ENTER و WAIT_FOR_FINISH تکیه کنید.

تعیین در دسترس بودن سرویس

مثال زیر نحوه استفاده از API میان‌افزار در بسته سرویس شما را برای تعیین در دسترس بودن یک واحد سرویس نشان می‌دهد:

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 یک رابط برنامه‌نویسی میان‌افزار (middleware API) است که برای ایجاد رویدادی به نام unit_name استفاده می‌شود. این جریان رویداد ثبت‌نام، زمانی که یک واحد سرویس در دسترس قرار می‌گیرد، مطلع می‌شود.