diff --git a/components/clp-rust-utils/src/job_config/search.rs b/components/clp-rust-utils/src/job_config/search.rs index dded4e7c39..e6eda35af4 100644 --- a/components/clp-rust-utils/src/job_config/search.rs +++ b/components/clp-rust-utils/src/job_config/search.rs @@ -5,6 +5,8 @@ use serde::Serialize; pub const QUERY_JOBS_TABLE_NAME: &str = "query_jobs"; +pub type QueryJobId = i32; + /// Mirror of `job_orchestration.scheduler.job_config.AggregationConfig`. Must be kept in sync. #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)] #[serde(default)] diff --git a/components/clp-rust-utils/src/task_io.rs b/components/clp-rust-utils/src/task_io.rs index 376ef623d5..09f7d4812e 100644 --- a/components/clp-rust-utils/src/task_io.rs +++ b/components/clp-rust-utils/src/task_io.rs @@ -1 +1,2 @@ pub mod compression; +pub mod query; diff --git a/components/clp-rust-utils/src/task_io/query.rs b/components/clp-rust-utils/src/task_io/query.rs new file mode 100644 index 0000000000..b5f53a9c4b --- /dev/null +++ b/components/clp-rust-utils/src/task_io/query.rs @@ -0,0 +1,31 @@ +//! Protocol types exchanged with the Spider (Huntsman) tasks that run CLP query jobs. + +use std::num::NonZeroU32; + +use non_empty_string::NonEmptyString; +use serde::Deserialize; +use serde::Serialize; + +/// `clp-s` options for a query job. +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub struct ClpSQueryOption { + /// The query string passed positionally to `clp-s`. + pub query_string: NonEmptyString, + + /// The per-archive result limit. When absent, the task omits `--max-num-results` and uses the + /// `clp-s` default. + pub max_num_results: Option, + + /// Inclusive `--tge` bound in Unix epoch milliseconds. + pub begin_timestamp_millisecs: Option, + + /// Inclusive `--tle` bound in Unix epoch milliseconds. + pub end_timestamp_millisecs: Option, + + /// Whether `clp-s` performs a case-insensitive search. + pub ignore_case: bool, +} + +/// The output handler that `clp-s` writes a query task's results to. +#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] +pub enum OutputHandle {} diff --git a/components/clp-tdl-package/src/lib.rs b/components/clp-tdl-package/src/lib.rs index 42aa104fb8..750047df6a 100644 --- a/components/clp-tdl-package/src/lib.rs +++ b/components/clp-tdl-package/src/lib.rs @@ -1,4 +1,4 @@ -//! Spider TDL task package `clp`: the CLP compression tasks the Spider task executor loads. +//! Spider TDL package `clp`, providing CLP compression and query tasks for Spider task executors. pub mod common; mod task; @@ -28,5 +28,9 @@ fn package_init() -> Result<(), TdlError> { spider_tdl::register_tdl_package! { package_name: "clp", init: package_init, - tasks: [task::compression::s3_compress_task, task::compression::commit_task], + tasks: [ + task::compression::s3_compress_task, + task::compression::commit_task, + task::query::clp_s_search_task, + ], } diff --git a/components/clp-tdl-package/src/task/mod.rs b/components/clp-tdl-package/src/task/mod.rs index f672b3ee36..25acd8a5ff 100644 --- a/components/clp-tdl-package/src/task/mod.rs +++ b/components/clp-tdl-package/src/task/mod.rs @@ -1,3 +1,4 @@ //! The task implementations this package registers with Spider. pub mod compression; +pub mod query; diff --git a/components/clp-tdl-package/src/task/query/mod.rs b/components/clp-tdl-package/src/task/query/mod.rs new file mode 100644 index 0000000000..9326b20631 --- /dev/null +++ b/components/clp-tdl-package/src/task/query/mod.rs @@ -0,0 +1,20 @@ +//! The query-task signatures registered with Spider. + +use clp_rust_utils::job_config::QueryJobId; +use clp_rust_utils::task_io::query::ClpSQueryOption; +use clp_rust_utils::task_io::query::OutputHandle; +use non_empty_string::NonEmptyString; +use spider_tdl::TaskContext; +use spider_tdl::task; + +#[task(name = "query::clp_s_search")] +pub(crate) fn clp_s_search_task( + _ctx: TaskContext, + _query_job_id: QueryJobId, + _clp_s_query_option: ClpSQueryOption, + _dataset: Option, + _archive_id: NonEmptyString, + _output_handle: OutputHandle, +) -> Result<(), spider_tdl::TdlError> { + todo!("clp-s search task is not implemented") +}