Skip to content

Commit 03ee617

Browse files
committed
DEBUG: re-hardcode init for testing
regression issue with pivot hash
1 parent 24b0140 commit 03ee617

File tree

3 files changed

+126
-123
lines changed

3 files changed

+126
-123
lines changed

src/init/init.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,16 @@ async fn main() {
102102
let core_pool = AsyncStreamPool::new(
103103
SocketAddress::new_vsock(cid, start_port, VMADDR_NO_FLAGS),
104104
TimeVal::seconds(0),
105-
1, // start at pool size 1, grow based on manifest/args as necessary (see Reaper)
105+
// TODO: debugging
106+
2, // start at pool size 1, grow based on manifest/args as necessary (see Reaper)
106107
)
107108
.expect("unable to create core pool");
108109

109110
let app_pool = AsyncStreamPool::new(
110111
SocketAddress::new_unix(SEC_APP_SOCK),
111112
TimeVal::seconds(5),
112-
1, // start at pool size 1, grow based on manifest/args as necessary (see Reaper)
113+
// TODO: debugging
114+
1, // start at pool size 1, grow based on manifest/args as necessary (see Reaper)
113115
)
114116
.expect("unable to create app pool");
115117

src/qos_core/src/protocol/async_processor.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ use tokio::sync::Mutex;
77
use super::{
88
error::ProtocolError, msg::ProtocolMsg, state::ProtocolState, ProtocolPhase,
99
};
10-
use crate::{
11-
async_server::AsyncRequestProcessor,
12-
io::{IOError, SharedAsyncStreamPool},
13-
};
10+
use crate::{async_server::AsyncRequestProcessor, io::SharedAsyncStreamPool};
1411

1512
const MEGABYTE: usize = 1024 * 1024;
1613
const MAX_ENCODED_MSG_LEN: usize = 128 * MEGABYTE;
@@ -47,10 +44,11 @@ impl AsyncProcessor {
4744
self.state.lock().await.get_phase()
4845
}
4946

50-
/// Expands the app pool to given pool size
51-
pub async fn expand_to(&mut self, pool_size: u32) -> Result<(), IOError> {
52-
self.app_pool.write().await.expand_to(pool_size)
53-
}
47+
// TODO: debugging
48+
// /// Expands the app pool to given pool size
49+
// pub async fn expand_to(&mut self, pool_size: u32) -> Result<(), IOError> {
50+
// self.app_pool.write().await.expand_to(pool_size)
51+
// }
5452
}
5553

5654
impl AsyncRequestProcessor for AsyncProcessor {

src/qos_core/src/reaper.rs

Lines changed: 116 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ impl Reaper {
114114
mod inner {
115115
use std::{
116116
sync::{Arc, RwLock},
117-
time::Duration,
117+
// time::Duration,
118118
};
119119

120120
#[allow(clippy::wildcard_imports)]
@@ -128,8 +128,8 @@ mod inner {
128128
// basic helper for x-thread comms in Reaper
129129
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
130130
enum InterState {
131-
// We're booting, no pivot yet
132-
Booting,
131+
// // We're booting, no pivot yet
132+
// Booting,
133133
// We've booted and pivot is ready
134134
PivotReady,
135135
// We're quitting (ctrl+c for tests and such)
@@ -153,7 +153,8 @@ mod inner {
153153
test_only_init_phase_override: Option<ProtocolPhase>,
154154
) {
155155
let handles2 = handles.clone();
156-
let inter_state = Arc::new(RwLock::new(InterState::Booting));
156+
// TODO: debugging, set to Booting to revert
157+
let inter_state = Arc::new(RwLock::new(InterState::PivotReady));
157158
let server_state = inter_state.clone();
158159

159160
std::thread::spawn(move || {
@@ -170,49 +171,50 @@ mod inner {
170171
test_only_init_phase_override,
171172
);
172173
// send a shared version of state and the async pool to each processor
173-
let mut processor = AsyncProcessor::new(
174+
let processor = AsyncProcessor::new(
174175
protocol_state.shared(),
175176
app_pool.shared(),
176177
);
177178
// listen_all will multiplex the processor accross all sockets
178-
let mut server =
179+
let server =
179180
AsyncSocketServer::listen_all(pool, &processor)
180181
.expect("unable to get listen task list");
181182

182-
loop {
183-
let (manifest_present, pool_size) =
184-
get_pool_size_from_pivot_args(&handles2);
185-
let pool_size = pool_size.unwrap_or(1);
186-
// expand server to pool_size + 1 (due to qos-host extra socket)
187-
server.listen_to(pool_size + 1, &processor).expect(
188-
"unable to listen_to on the running server",
189-
);
190-
// expand app connections to pool_size
191-
processor.expand_to(pool_size).await.expect(
192-
"unable to expand_to on the processor app pool",
193-
);
194-
195-
if manifest_present {
196-
*server_state.write().unwrap() =
197-
InterState::PivotReady;
198-
eprintln!("manifest is present, breaking out of server check loop");
199-
break;
200-
}
201-
202-
// sleep up to 1s, checking for ctrl+c, if it happens break out
203-
if let Ok(ctrl_res) = tokio::time::timeout(
204-
Duration::from_secs(1),
205-
tokio::signal::ctrl_c(),
206-
)
207-
.await
208-
{
209-
return ctrl_c_handler(
210-
ctrl_res,
211-
server,
212-
&server_state,
213-
);
214-
}
215-
}
183+
// TODO: debugging
184+
// loop {
185+
// let (manifest_present, pool_size) =
186+
// get_pool_size_from_pivot_args(&handles2);
187+
// let pool_size = pool_size.unwrap_or(1);
188+
// // expand server to pool_size + 1 (due to qos-host extra socket)
189+
// server.listen_to(pool_size + 1, &processor).expect(
190+
// "unable to listen_to on the running server",
191+
// );
192+
// // expand app connections to pool_size
193+
// processor.expand_to(pool_size).await.expect(
194+
// "unable to expand_to on the processor app pool",
195+
// );
196+
197+
// if manifest_present {
198+
// *server_state.write().unwrap() =
199+
// InterState::PivotReady;
200+
// eprintln!("manifest is present, breaking out of server check loop");
201+
// break;
202+
// }
203+
204+
// // sleep up to 1s, checking for ctrl+c, if it happens break out
205+
// if let Ok(ctrl_res) = tokio::time::timeout(
206+
// Duration::from_secs(1),
207+
// tokio::signal::ctrl_c(),
208+
// )
209+
// .await
210+
// {
211+
// return ctrl_c_handler(
212+
// ctrl_res,
213+
// server,
214+
// &server_state,
215+
// );
216+
// }
217+
// }
216218
// wait until ctrl+c
217219
ctrl_c_handler(
218220
tokio::signal::ctrl_c().await,
@@ -303,79 +305,80 @@ mod inner {
303305
Err(err) => panic!("{err}"),
304306
}
305307
}
306-
307-
// return if we have manifest and get pool_size args if present from it
308-
fn get_pool_size_from_pivot_args(handles: &Handles) -> (bool, Option<u32>) {
309-
if let Ok(envelope) = handles.get_manifest_envelope() {
310-
(true, extract_pool_size_arg(&envelope.manifest.pivot.args))
311-
} else {
312-
(false, None)
313-
}
314-
}
315-
316-
// find the u32 value of --pool-size argument passed to the pivot if present
317-
fn extract_pool_size_arg(args: &[String]) -> Option<u32> {
318-
if let Some((i, _)) =
319-
args.iter().enumerate().find(|(_, a)| *a == "--pool-size")
320-
{
321-
if let Some(pool_size_str) = args.get(i + 1) {
322-
match pool_size_str.parse::<u32>() {
323-
Ok(pool_size) => Some(pool_size),
324-
Err(_) => None,
325-
}
326-
} else {
327-
None
328-
}
329-
} else {
330-
None
331-
}
332-
}
333-
334-
#[cfg(test)]
335-
mod test {
336-
use super::*;
337-
338-
#[test]
339-
fn extract_pool_size_arg_works() {
340-
// no arg
341-
assert_eq!(
342-
extract_pool_size_arg(&vec![
343-
"unrelated".to_owned(),
344-
"--args".to_owned(),
345-
]),
346-
None
347-
);
348-
349-
// should work
350-
assert_eq!(
351-
extract_pool_size_arg(&vec![
352-
"--pool-size".to_owned(),
353-
"8".to_owned(),
354-
]),
355-
Some(8)
356-
);
357-
358-
// wrong number, expect None
359-
assert_eq!(
360-
extract_pool_size_arg(&vec![
361-
"--pool-size".to_owned(),
362-
"8a".to_owned(),
363-
]),
364-
None
365-
);
366-
367-
// duplicate arg, use 1st
368-
assert_eq!(
369-
extract_pool_size_arg(&vec![
370-
"--pool-size".to_owned(),
371-
"8".to_owned(),
372-
"--pool-size".to_owned(),
373-
"9".to_owned(),
374-
]),
375-
Some(8)
376-
);
377-
}
378-
}
379308
}
380309

310+
// // return if we have manifest and get pool_size args if present from it
311+
// fn get_pool_size_from_pivot_args(handles: &Handles) -> (bool, Option<u32>) {
312+
// if let Ok(envelope) = handles.get_manifest_envelope() {
313+
// (true, extract_pool_size_arg(&envelope.manifest.pivot.args))
314+
// } else {
315+
// (false, None)
316+
// }
317+
// }
318+
319+
// // find the u32 value of --pool-size argument passed to the pivot if present
320+
// fn extract_pool_size_arg(args: &[String]) -> Option<u32> {
321+
// if let Some((i, _)) =
322+
// args.iter().enumerate().find(|(_, a)| *a == "--pool-size")
323+
// {
324+
// if let Some(pool_size_str) = args.get(i + 1) {
325+
// match pool_size_str.parse::<u32>() {
326+
// Ok(pool_size) => Some(pool_size),
327+
// Err(_) => None,
328+
// }
329+
// } else {
330+
// None
331+
// }
332+
// } else {
333+
// None
334+
// }
335+
// }
336+
337+
// #[cfg(test)]
338+
// mod test {
339+
// use super::*;
340+
341+
// #[test]
342+
// fn extract_pool_size_arg_works() {
343+
// // no arg
344+
// assert_eq!(
345+
// extract_pool_size_arg(&vec![
346+
// "unrelated".to_owned(),
347+
// "--args".to_owned(),
348+
// ]),
349+
// None
350+
// );
351+
352+
// // should work
353+
// assert_eq!(
354+
// extract_pool_size_arg(&vec![
355+
// "--pool-size".to_owned(),
356+
// "8".to_owned(),
357+
// ]),
358+
// Some(8)
359+
// );
360+
361+
// // wrong number, expect None
362+
// assert_eq!(
363+
// extract_pool_size_arg(&vec![
364+
// "--pool-size".to_owned(),
365+
// "8a".to_owned(),
366+
// ]),
367+
// None
368+
// );
369+
370+
// // duplicate arg, use 1st
371+
// assert_eq!(
372+
// extract_pool_size_arg(&vec![
373+
// "--pool-size".to_owned(),
374+
// "8".to_owned(),
375+
// "--pool-size".to_owned(),
376+
// "9".to_owned(),
377+
// ]),
378+
// Some(8)
379+
// );
380+
// }
381+
// }
382+
// }
383+
381384
// See qos_test/tests/async_reaper for more tests

0 commit comments

Comments
 (0)