Askıya alma ve devam ettirme işlemlerini yönetme

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:

Hizmet paketinin yaşam döngüsü

Şekil 1. Hizmet paketinin yaşam döngüsü.

Hizmet paketi yaşam döngüsü şu sırayı izler:

  1. Hizmet paketi oluşturmak için new yöntemi çağrılır.
  2. Yaşam döngüsü yöneticisi, hizmet paketini başlatır ve orkestrasyon yapılandırmasındaki ayarlara bağlı olarak on_start işlevini çağırır.
  3. 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_stop işlevini çağırdığında. on_stop işlevi, yayıncılar, aboneler, RPC istemcileri ve RPC sunucuları için iş parçacıklarını durdurmalıdır.
  4. Sanal makine devam ettirildiğinde, hizmet paketi orkestrasyon yapılandırması tarafından yeniden başlatılacak şekilde yapılandırılmışsa on_start iş 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ında onStop işlevini çağırmak için SUSPEND_TO_RAM_POST_FINISH veya POWER_OFF_POST_FINISH işlevlerine güvenmemek, bunun yerine SUSPEND_TO_RAM_ENTER, POWER_OFF_ENTER ve WAIT_FOR_FINISH iş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.