Merge changes If5df4808,Ia760a4da,I0b797a15 into main
* changes:
guest: Wait for a file of gRPC port number getting ready
guest: Emit debian service's debug log into stderr
guest: shutdown_runner: Add license header
diff --git a/guest/forwarder_guest_launcher/debian/service b/guest/forwarder_guest_launcher/debian/service
index ad57a26..7812d67 100644
--- a/guest/forwarder_guest_launcher/debian/service
+++ b/guest/forwarder_guest_launcher/debian/service
@@ -5,7 +5,7 @@
After=virtiofs_internal.service
[Service]
-ExecStart=/usr/bin/bash -c '/usr/bin/forwarder_guest_launcher --grpc_port $(cat /mnt/internal/debian_service_port)'
+ExecStart=/usr/bin/bash -c '/usr/bin/forwarder_guest_launcher --grpc-port-file /mnt/internal/debian_service_port'
Type=simple
Restart=on-failure
RestartSec=1
diff --git a/guest/forwarder_guest_launcher/src/main.rs b/guest/forwarder_guest_launcher/src/main.rs
index f4c8ca9..3cb557a 100644
--- a/guest/forwarder_guest_launcher/src/main.rs
+++ b/guest/forwarder_guest_launcher/src/main.rs
@@ -52,10 +52,9 @@
#[derive(Parser)]
/// Flags for running command
pub struct Args {
- /// grpc port number
+ /// path to a file where grpc port number is written
#[arg(long)]
- #[arg(alias = "grpc_port")]
- grpc_port: String,
+ grpc_port_file: String,
}
async fn process_forwarding_request_queue(
@@ -163,11 +162,23 @@
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
- env_logger::init();
+ env_logger::builder().filter_level(log::LevelFilter::Debug).init();
debug!("Starting forwarder_guest_launcher");
let args = Args::parse();
let gateway_ip_addr = netdev::get_default_gateway()?.ipv4[0];
- let addr = format!("https://{}:{}", gateway_ip_addr.to_string(), args.grpc_port);
+
+ // Wait for `grpc_port_file` becomes available.
+ const GRPC_PORT_MAX_RETRY_COUNT: u32 = 10;
+ for _ in 0..GRPC_PORT_MAX_RETRY_COUNT {
+ if std::path::Path::new(&args.grpc_port_file).exists() {
+ break;
+ }
+ debug!("{} does not exist. Wait 1 second", args.grpc_port_file);
+ tokio::time::sleep(std::time::Duration::from_secs(1)).await;
+ }
+ let grpc_port = std::fs::read_to_string(&args.grpc_port_file)?.trim().to_string();
+
+ let addr = format!("https://{}:{}", gateway_ip_addr.to_string(), grpc_port);
let channel = Endpoint::from_shared(addr)?.connect().await?;
let client = DebianServiceClient::new(channel);
diff --git a/guest/shutdown_runner/Cargo.toml b/guest/shutdown_runner/Cargo.toml
index 0b44baa..92f8762 100644
--- a/guest/shutdown_runner/Cargo.toml
+++ b/guest/shutdown_runner/Cargo.toml
@@ -7,6 +7,7 @@
[dependencies]
anyhow = "1.0.94"
clap = { version = "4.5.20", features = ["derive"] }
+env_logger = "0.11.5"
log = "0.4.22"
netdev = "0.31.0"
prost = "0.13.3"
diff --git a/guest/shutdown_runner/debian/service b/guest/shutdown_runner/debian/service
index 2668930..a5249d0 100644
--- a/guest/shutdown_runner/debian/service
+++ b/guest/shutdown_runner/debian/service
@@ -4,7 +4,7 @@
After=virtiofs_internal.service
[Service]
-ExecStart=/usr/bin/bash -c '/usr/bin/shutdown_runner --grpc_port $(cat /mnt/internal/debian_service_port)'
+ExecStart=/usr/bin/bash -c '/usr/bin/shutdown_runner --grpc-port-file /mnt/internal/debian_service_port'
Type=simple
Restart=on-failure
RestartSec=1
diff --git a/guest/shutdown_runner/src/main.rs b/guest/shutdown_runner/src/main.rs
index 19e9883..4043002 100644
--- a/guest/shutdown_runner/src/main.rs
+++ b/guest/shutdown_runner/src/main.rs
@@ -1,3 +1,17 @@
+// Copyright 2024 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use api::debian_service_client::DebianServiceClient;
use api::ShutdownQueueOpeningRequest;
use std::process::Command;
@@ -12,18 +26,28 @@
#[derive(Parser)]
/// Flags for running command
pub struct Args {
- /// grpc port number
+ /// Path to a file where grpc port number is written
#[arg(long)]
- #[arg(alias = "grpc_port")]
- grpc_port: String,
+ grpc_port_file: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
+ env_logger::builder().filter_level(log::LevelFilter::Debug).init();
let args = Args::parse();
let gateway_ip_addr = netdev::get_default_gateway()?.ipv4[0];
- let server_addr = format!("http://{}:{}", gateway_ip_addr.to_string(), args.grpc_port);
+ // Wait for `grpc_port_file` becomes available.
+ const GRPC_PORT_MAX_RETRY_COUNT: u32 = 10;
+ for _ in 0..GRPC_PORT_MAX_RETRY_COUNT {
+ if std::path::Path::new(&args.grpc_port_file).exists() {
+ break;
+ }
+ debug!("{} does not exist. Wait 1 second", args.grpc_port_file);
+ tokio::time::sleep(std::time::Duration::from_secs(1)).await;
+ }
+ let grpc_port = std::fs::read_to_string(&args.grpc_port_file)?.trim().to_string();
+ let server_addr = format!("http://{}:{}", gateway_ip_addr.to_string(), grpc_port);
debug!("connect to grpc server {}", server_addr);