일시중지 및 재개 처리

가상 머신 (VM)은 일시중지, 재개, 재부팅, 종료할 수 있습니다. 이러한 이벤트가 발생하면 게시자, 구독자, RPC 클라이언트, RPC 서버가 영향을 받습니다. 그림 1은 서비스 번들의 수명 주기를 보여줍니다.

서비스 번들의 수명 주기

그림 1. 서비스 번들의 수명 주기입니다.

서비스 번들 수명 주기는 다음 순서를 따릅니다.

  1. new 메서드가 호출되어 서비스 번들을 만듭니다.
  2. 수명 주기 관리자는 서비스 번들을 시작하고 조정 구성의 설정에 따라 on_start를 호출합니다.
  3. VM이 중지되거나 일시중지되고 오케스트레이션 구성의 설정에 따라 수명 주기 관리자가 on_stop를 호출합니다. on_stop 함수는 게시자, 구독자, RPC 클라이언트, RPC 서버의 스레드를 중지해야 합니다.
  4. 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_FINISHonStop를 호출하도록 하지 말고 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_streamunit_name이라는 이벤트를 만드는 데 사용되는 미들웨어 API입니다. 이 등록 이벤트 스트림은 서비스 단위를 사용할 수 있게 되면 알림을 받습니다.