সাসপেন্ড এবং সারসংকলন পরিচালনা করুন

ভার্চুয়াল মেশিন (VM) সাসপেন্ড, রিজুম, রিবুট এবং শাট ডাউন করা যায়। যখন এই ঘটনাগুলোর কোনোটি ঘটে, তখন পাবলিশার, সাবস্ক্রাইবার, RPC ক্লায়েন্ট এবং RPC সার্ভারগুলো প্রভাবিত হয়। চিত্র ১-এ একটি সার্ভিস বান্ডেলের জীবনচক্র দেখানো হয়েছে:

একটি পরিষেবা বান্ডেলের জীবনচক্র

চিত্র ১. একটি সার্ভিস বান্ডেলের জীবনচক্র।

সার্ভিস বান্ডেলের জীবনচক্র নিম্নলিখিত ক্রম অনুসরণ করে:

  1. সার্ভিস বান্ডেল তৈরি করার জন্য new পদ্ধতিটি কল করা হয়।
  2. লাইফসাইকেল ম্যানেজার সার্ভিস বান্ডেলটি চালু করে এবং অর্কেস্ট্রেশন কনফিগারেশনের সেটিংস অনুযায়ী on_start কল করে।
  3. যখন ভিএম বন্ধ বা সাসপেন্ড হয়, তখন অর্কেস্ট্রেশন কনফিগারেশনের সেটিংসের উপর নির্ভর করে লাইফসাইকেল ম্যানেজার on_stop ফাংশনটি কল করে। এই on_stop ফাংশনটির কাজ হলো পাবলিশার, সাবস্ক্রাইবার, আরপিসি ক্লায়েন্ট এবং আরপিসি সার্ভারের থ্রেডগুলো বন্ধ করে দেওয়া।
  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 উপর নির্ভর করা গুরুত্বপূর্ণ।

পরিষেবার প্রাপ্যতা নির্ধারণ করুন

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে আপনার সার্ভিস বান্ডেলে মিডলওয়্যার এপিআই ব্যবহার করে একটি সার্ভিস ইউনিট উপলব্ধ আছে কিনা তা নির্ধারণ করা যায়:

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 নামক একটি ইভেন্ট তৈরি করতে ব্যবহৃত হয়। যখন কোনো সার্ভিস ইউনিট উপলব্ধ হয়, তখন এই রেজিস্ট্রেশন ইভেন্ট স্ট্রিমে বিজ্ঞপ্তি পাঠানো হয়।