אפשר להשהות, להפעיל מחדש, לאתחל ולכבות מכונות וירטואליות (VM). כשכל אחד מהאירועים האלה מתרחש, הוא משפיע על בעלי אתרים, מנויים, לקוחות RPC ושרתי RPC. איור 1 מציג את מחזור החיים של חבילת שירותים:
איור 1. מחזור החיים של חבילת שירות.
מחזור החיים של חבילת השירותים מתנהל לפי הרצף הבא:
- השיטה
newמופעלת כדי ליצור את חבילת השירות. - מנהל מחזור החיים מפעיל את חבילת השירות, ובהתאם להגדרות בהגדרת התזמור, מפעיל את
on_start. - כשה-VM נעצר או מושהה, ובאמצעות הגדרות בהגדרת התזמור, מנהל מחזור החיים קורא ל-
on_stop. הפונקציהon_stopאמורה לעצור את השרשורים של בעלי תוכן דיגיטלי, מנויים, לקוחות RPC ושרתי RPC. - כשממשיכים את הפעולה של מכונת ה-VM,
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 סוגרים או משעים את החיבור כדי שיוכלו לשחזר אותו בצורה מהימנה בהמשך. חשוב לא להסתמך עלSUSPEND_TO_RAM_POST_FINISHאו עלPOWER_OFF_POST_FINISHכדי לקרוא ל-onStopבהטמעה של חבילת השירות, אלא להסתמך עלSUSPEND_TO_RAM_ENTER,POWER_OFF_ENTERו-WAIT_FOR_FINISH.
קביעת זמינות השירות
בדוגמה הבאה אפשר לראות איך משתמשים ב-Middleware 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 הוא API של תוכנת ביניים שמשמש ליצירת אירוע שנקרא unit_name. התראות על אירועים בסטרימינג של רישום מתקבלות כשזמינה יחידת שירות.