send and wait for dnixd flush signal
This commit is contained in:
parent
cf00f851e1
commit
4631601e5d
|
@ -94,6 +94,10 @@ async fn workflow_finish(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// maybe here send the request to Dnixd to Flush
|
||||||
|
// save uuid from response
|
||||||
|
// then wait on receiver until we get that same uuid back
|
||||||
|
|
||||||
if let Some(gha_cache) = &state.gha_cache {
|
if let Some(gha_cache) = &state.gha_cache {
|
||||||
tracing::info!("Waiting for GitHub action cache uploads to finish");
|
tracing::info!("Waiting for GitHub action cache uploads to finish");
|
||||||
gha_cache.shutdown().await?;
|
gha_cache.shutdown().await?;
|
||||||
|
|
|
@ -37,6 +37,7 @@ use clap::Parser;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tokio::fs::File;
|
use tokio::fs::File;
|
||||||
use tokio::io::AsyncWriteExt;
|
use tokio::io::AsyncWriteExt;
|
||||||
|
use tokio::sync::mpsc::UnboundedReceiver;
|
||||||
use tokio::sync::{oneshot, Mutex, RwLock};
|
use tokio::sync::{oneshot, Mutex, RwLock};
|
||||||
use tracing_subscriber::filter::EnvFilter;
|
use tracing_subscriber::filter::EnvFilter;
|
||||||
use tracing_subscriber::layer::SubscriberExt;
|
use tracing_subscriber::layer::SubscriberExt;
|
||||||
|
@ -227,6 +228,9 @@ struct StateInner {
|
||||||
|
|
||||||
/// The paths in the Nix store when Magic Nix Cache started, if store diffing is enabled.
|
/// The paths in the Nix store when Magic Nix Cache started, if store diffing is enabled.
|
||||||
original_paths: Option<Mutex<HashSet<PathBuf>>>,
|
original_paths: Option<Mutex<HashSet<PathBuf>>>,
|
||||||
|
|
||||||
|
/// The receiver side of the channel we use to get flush events from dnixd back to the workflow_shutdown handler
|
||||||
|
dnixd_flush_receiver: Option<UnboundedReceiver<uuid::Uuid>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
@ -422,6 +426,15 @@ async fn main_cli() -> Result<()> {
|
||||||
|
|
||||||
let (shutdown_sender, shutdown_receiver) = oneshot::channel();
|
let (shutdown_sender, shutdown_receiver) = oneshot::channel();
|
||||||
|
|
||||||
|
let dnixd_flush_channel = if dnixd_available == Dnixd::Available {
|
||||||
|
Some(tokio::sync::mpsc::unbounded_channel())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
// ????
|
||||||
|
let dnixd_flush_sender = dnixd_flush_channel.as_ref().map(|c| c.0.clone());
|
||||||
|
let dnixd_flush_receiver = dnixd_flush_channel.map(|c| c.1);
|
||||||
|
|
||||||
let original_paths = args.diff_store.then_some(Mutex::new(HashSet::new()));
|
let original_paths = args.diff_store.then_some(Mutex::new(HashSet::new()));
|
||||||
let state = Arc::new(StateInner {
|
let state = Arc::new(StateInner {
|
||||||
gha_cache,
|
gha_cache,
|
||||||
|
@ -433,11 +446,12 @@ async fn main_cli() -> Result<()> {
|
||||||
flakehub_state: RwLock::new(flakehub_state),
|
flakehub_state: RwLock::new(flakehub_state),
|
||||||
logfile: guard.logfile,
|
logfile: guard.logfile,
|
||||||
original_paths,
|
original_paths,
|
||||||
|
dnixd_flush_receiver,
|
||||||
});
|
});
|
||||||
|
|
||||||
if dnixd_available == Dnixd::Available {
|
if dnixd_available == Dnixd::Available {
|
||||||
tracing::info!("Subscribing to Determinate Nixd build events.");
|
tracing::info!("Subscribing to Determinate Nixd build events.");
|
||||||
crate::pbh::subscribe_uds_post_build_hook(dnixd_uds_socket_path, state.clone()).await?;
|
crate::pbh::subscribe_uds_post_build_hook(dnixd_uds_socket_path, state.clone(), dnixd_flush_sender).await?;
|
||||||
} else {
|
} else {
|
||||||
tracing::info!("Patching nix.conf to use a post-build-hook.");
|
tracing::info!("Patching nix.conf to use a post-build-hook.");
|
||||||
crate::pbh::setup_legacy_post_build_hook(&args.listen, &mut nix_conf).await?;
|
crate::pbh::setup_legacy_post_build_hook(&args.listen, &mut nix_conf).await?;
|
||||||
|
|
|
@ -21,6 +21,7 @@ use crate::State;
|
||||||
pub async fn subscribe_uds_post_build_hook(
|
pub async fn subscribe_uds_post_build_hook(
|
||||||
dnixd_uds_socket_path: PathBuf,
|
dnixd_uds_socket_path: PathBuf,
|
||||||
state: State,
|
state: State,
|
||||||
|
dnixd_flush_sender: Option<tokio::sync::mpsc::UnboundedSender<uuid::Uuid>>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
let dnixd_uds_socket_path = &dnixd_uds_socket_path;
|
let dnixd_uds_socket_path = &dnixd_uds_socket_path;
|
||||||
|
@ -79,6 +80,9 @@ pub async fn subscribe_uds_post_build_hook(
|
||||||
tracing::debug!("built-paths subscription: ignoring non-data frame");
|
tracing::debug!("built-paths subscription: ignoring non-data frame");
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: check for flush event of flush type - send it to the sender
|
||||||
|
|
||||||
let Ok(event): core::result::Result<BuiltPathResponseEventV1, _> =
|
let Ok(event): core::result::Result<BuiltPathResponseEventV1, _> =
|
||||||
serde_json::from_slice(event_str)
|
serde_json::from_slice(event_str)
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Reference in a new issue