Skip to content

Commit

Permalink
refactor: add new logs
Browse files Browse the repository at this point in the history
fix: reduce the number of requests when querying CFS components
fix: get hsm group details for a list of hsm group names in parallel
  • Loading branch information
ManuelSopenaBallesteros committed Jul 4, 2024
1 parent b66857a commit 0c139bc
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 12 deletions.
1 change: 1 addition & 0 deletions src/bos/template/mesa/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ pub async fn filter(
// cfs_configuration_name_opt: Option<&str>,
limit_number_opt: Option<&u8>,
) -> Vec<BosSessionTemplate> {
log::info!("Filter BOS sessiontemplates");
// Filter by list of HSM group or xnames as target
if !hsm_group_name_vec.is_empty() || !xname_vec.is_empty() {
bos_sessiontemplate_vec.retain(|bos_sessiontemplate| {
Expand Down
2 changes: 1 addition & 1 deletion src/cfs/component/mesa/http_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ pub async fn get_multiple(
) -> Result<Vec<CfsComponent>, Error> {
let start = Instant::now();

let chunk_size = 80;
let chunk_size = 20;
let pipe_size = 10;

log::debug!("Number of nodes per request: {chunk_size}; Pipe size (semaphore): {pipe_size}");
Expand Down
3 changes: 2 additions & 1 deletion src/cfs/configuration/mesa/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,14 @@ pub async fn filter(
hsm_group_name_vec: &[String],
limit_number_opt: Option<&u8>,
) -> Vec<CfsConfigurationResponse> {
log::info!("Filter CFS configurations");
// Fetch CFS components and filter by HSM group members
let cfs_component_vec: Vec<CfsComponent> = if !hsm_group_name_vec.is_empty() {
let hsm_group_members = hsm::group::utils::get_member_vec_from_hsm_name_vec(
shasta_token,
shasta_base_url,
shasta_root_cert,
hsm_group_name_vec,
hsm_group_name_vec.to_vec(),
)
.await;

Expand Down
2 changes: 1 addition & 1 deletion src/cfs/configuration/shasta/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ pub async fn filter(
shasta_token,
shasta_base_url,
shasta_root_cert,
hsm_group_name_vec,
hsm_group_name_vec.to_vec(),
)
.await;

Expand Down
7 changes: 4 additions & 3 deletions src/cfs/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ pub mod shasta {
shasta_token,
shasta_base_url,
shasta_root_cert,
hsm_group_name_vec,
hsm_group_name_vec.to_vec(),
)
.await;

Expand Down Expand Up @@ -376,7 +376,7 @@ pub mod shasta {
shasta_token,
shasta_base_url,
shasta_root_cert,
hsm_group_name_vec,
hsm_group_name_vec.to_vec(),
)
.await;

Expand Down Expand Up @@ -1089,11 +1089,12 @@ pub mod mesa {
hsm_group_name_vec: &[String],
limit_number_opt: Option<&u8>,
) {
log::info!("Filter CFS sessions");
let xname_vec: Vec<String> = hsm::group::utils::get_member_vec_from_hsm_name_vec(
shasta_token,
shasta_base_url,
shasta_root_cert,
hsm_group_name_vec,
hsm_group_name_vec.to_vec(),
)
.await;

Expand Down
72 changes: 67 additions & 5 deletions src/hsm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -354,14 +354,22 @@ pub mod group {

pub mod utils {

use std::collections::{HashMap, HashSet};
use std::{
collections::{HashMap, HashSet},
sync::Arc,
time::Instant,
};

use serde_json::Value;
use tokio::sync::Semaphore;

use crate::{
cfs::session::mesa::r#struct::v2::CfsSessionGetResponse,
error::Error,
hsm::group::{http_client::post_member, r#struct::HsmGroup},
hsm::group::{
http_client::{get, post_member},
r#struct::HsmGroup,
},
};

use super::http_client::{self, delete_member};
Expand Down Expand Up @@ -442,9 +450,11 @@ pub mod group {
shasta_token: &str,
shasta_base_url: &str,
shasta_root_cert: &[u8],
hsm_name_vec: &[String],
hsm_name_vec: Vec<String>,
) -> Vec<String> {
let mut hsm_group_value_vec =
log::info!("Get xnames for HSM groups: {:?}", hsm_name_vec);

/* let mut hsm_group_value_vec =
http_client::get_all(shasta_token, shasta_base_url, shasta_root_cert)
.await
.unwrap();
Expand All @@ -455,7 +465,59 @@ pub mod group {
get_member_vec_from_hsm_group_vec(&hsm_group_value_vec)
.iter()
.cloned(),
)
) */

let start = Instant::now();

let mut hsm_group_member_vec: Vec<String> = Vec::new();

let pipe_size = 10;

let mut tasks = tokio::task::JoinSet::new();

let sem = Arc::new(Semaphore::new(pipe_size)); // CSM 1.3.1 higher number of concurrent tasks won't
//
for hsm_name in hsm_name_vec {
let shasta_token_string = shasta_token.to_string();
let shasta_base_url_string = shasta_base_url.to_string();
let shasta_root_cert_vec = shasta_root_cert.to_vec();

let permit = Arc::clone(&sem).acquire_owned().await;

tasks.spawn(async move {
let _permit = permit; // Wait semaphore to allow new tasks https://github.com/tokio-rs/tokio/discussions/2648#discussioncomment-34885

get(
&shasta_token_string,
&shasta_base_url_string,
&shasta_root_cert_vec,
Some(&hsm_name),
)
.await
.unwrap()
});
}

while let Some(message) = tasks.join_next().await {
if let Ok(hsm_group_vec) = message {
let mut hsm_grop_members = hsm_group_vec
.first()
.unwrap()
.members
.as_ref()
.unwrap()
.ids
.clone()
.unwrap();

hsm_group_member_vec.append(&mut hsm_grop_members);
}
}

let duration = start.elapsed();
log::info!("Time elapsed to get HSM members is: {:?}", duration);

hsm_group_member_vec
}

pub fn get_member_vec_from_hsm_group_value_vec(hsm_groups: &[Value]) -> HashSet<String> {
Expand Down
2 changes: 1 addition & 1 deletion src/ims/image/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ pub async fn filter(
shasta_token,
shasta_base_url,
shasta_root_cert,
hsm_group_name_vec,
hsm_group_name_vec.to_vec(),
)
.await;

Expand Down

0 comments on commit 0c139bc

Please sign in to comment.