Sanal makineler askıya alınabilir, devam ettirilebilir, yeniden başlatılabilir ve kapatılabilir. Bu etkinliklerden herhangi biri gerçekleştiğinde yayıncılar, aboneler, UPÇ istemcileri ve UPÇ sunucuları etkilenir. Şekil 1'de hizmet paketinin yaşam döngüsü gösterilmektedir:
Şekil 1. Hizmet paketinin yaşam döngüsü.
Hizmet paketi yaşam döngüsü şu sırayı izler:
- Hizmet paketi oluşturmak için
newyöntemi çağrılır. - Yaşam döngüsü yöneticisi, hizmet paketini başlatır ve orkestrasyon yapılandırmasındaki ayarlara bağlı olarak
on_startişlevini çağırır. - Sanal makine durduğunda veya askıya alındığında ve düzenleme yapılandırmasındaki ayarlara bağlı olarak yaşam döngüsü yöneticisi
on_stopişlevini çağırdığında.on_stopişlevi, yayıncılar, aboneler, RPC istemcileri ve RPC sunucuları için iş parçacıklarını durdurmalıdır. - Sanal makine devam ettirildiğinde, hizmet paketi orkestrasyon yapılandırması tarafından yeniden başlatılacak şekilde yapılandırılmışsa
on_startiş parçacıklarını yeniden oluşturabilir.
Askıya alma ve devam ettirme işlemlerini yönetmek için yapılandırma oluşturma
Aşağıdaki örnekte, askıya alma ve devam ettirme işlemlerini yönetmeye yönelik bir yapılandırma gösterilmektedir:
# 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" }
}
Nerede:
WAIT_FOR_FINISH, hizmet paketinin yazılım tanımlı araç (SDV) aracıların yanıt vermesini beklediği son güç durumudur.SUSPEND_TO_RAM_POST_FINISH, SDV aracıların devam ettirildiğinde güvenilir bir şekilde geri yüklenebilmesi için bağlantıyı kapatabileceğini veya askıya alabileceğini gösterir. Hizmet paketi uygulamasındaonStopişlevini çağırmak içinSUSPEND_TO_RAM_POST_FINISHveyaPOWER_OFF_POST_FINISHişlevlerine güvenmemek, bunun yerineSUSPEND_TO_RAM_ENTER,POWER_OFF_ENTERveWAIT_FOR_FINISHişlevlerine güvenmek önemlidir.
Hizmetin kullanılabilirliğini belirleme
Aşağıdaki örnekte, bir hizmet biriminin kullanılabilir olup olmadığını belirlemek için hizmet paketinizde ara yazılım API'sinin nasıl kullanılacağı gösterilmektedir:
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, unit_name adlı bir etkinlik oluşturmak için kullanılan bir ara katman yazılımı API'sidir. Bu kayıt etkinliği akışı, bir hizmet birimi kullanıma sunulduğunda bildirilir.