v0.3.15-pre.008
This commit is contained in:
@@ -1,14 +1,32 @@
|
||||
// file: crates/ksp-app-raw-transaction-ingest-desk/src/route_start.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
//! Start-time Config revalidation and Transport-resource reconstruction without Worker launch.
|
||||
//! Start-time Config revalidation and exact Transport/Store resource reconstruction for route validation and runtime launch.
|
||||
|
||||
/// Revalidates one future Start request against the current inventory generation and reconstructs the exact Worker source contract without starting it.
|
||||
pub(crate) fn validate_route_start(
|
||||
/// Fully revalidated Start preparation retaining backend-only Store settings and exact Worker runtime resources.
|
||||
pub(crate) struct PreparedRouteStart {
|
||||
/// Confirmed/finalized commitment validated by the exact route constructor.
|
||||
pub(crate) commitment: crate::RawIngestCommitment,
|
||||
/// Inventory generation proven current while this preparation was built.
|
||||
pub(crate) inventory_generation: u32,
|
||||
/// Logical network proven identical across Store and Transport.
|
||||
pub(crate) network: String,
|
||||
/// Logical network-profile identifier selected by the operator.
|
||||
pub(crate) profile_id: String,
|
||||
/// Logical route selected by the operator.
|
||||
pub(crate) route_id: crate::RawIngestRouteId,
|
||||
/// Backend-neutral Store settings resolved from Config and retained only in Rust.
|
||||
pub(crate) store_settings: ksp_store_lib::StoreSettings,
|
||||
/// Exact single-route Worker runtime resources reconstructed from typed Transport contracts.
|
||||
pub(crate) runtime_resources: ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources,
|
||||
}
|
||||
|
||||
/// Revalidates one Start request and retains the exact backend resources required for a later Worker launch.
|
||||
pub(crate) fn prepare_route_start(
|
||||
management: &ksp_config_lib::ConfigManagement,
|
||||
current_generation: u32,
|
||||
request: &crate::RawIngestRouteStartRequestDto,
|
||||
) -> ksp_core_lib::Result<crate::RawIngestRouteStartValidationDto> {
|
||||
) -> ksp_core_lib::Result<crate::PreparedRouteStart> {
|
||||
if current_generation == 0 || request.inventory_generation != current_generation {
|
||||
return std::result::Result::Err(ksp_core_lib::Error::new(
|
||||
crate::ERROR_CODE_ROUTE_START_STALE_INVENTORY,
|
||||
@@ -78,16 +96,17 @@ pub(crate) fn validate_route_start(
|
||||
));
|
||||
}
|
||||
let commitment = request.commitment.into_transport();
|
||||
let prepared = match request.route_id {
|
||||
let runtime_resources = match request.route_id {
|
||||
crate::RawIngestRouteId::YellowstoneHydrated => prepare_yellowstone(management, &environment, &composite, &transport, network, commitment),
|
||||
crate::RawIngestRouteId::StandardLogsHydrated => prepare_standard_logs(&transport, network, commitment),
|
||||
crate::RawIngestRouteId::StandardBlockDirect => prepare_standard_block(&transport, network, commitment),
|
||||
crate::RawIngestRouteId::HeliusTransactionHydrated => prepare_helius(management, &environment, &composite, &transport, network, commitment),
|
||||
crate::RawIngestRouteId::HttpBlockPolling => prepare_http_polling(&transport, network, commitment),
|
||||
};
|
||||
if let std::result::Result::Err(error) = prepared {
|
||||
return route_start_error("Cannot reconstruct Start-time Transport resources", error);
|
||||
}
|
||||
let runtime_resources = match runtime_resources {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return route_start_error("Cannot reconstruct Start-time Transport resources", error),
|
||||
};
|
||||
ksp_logging_lib::debug!(
|
||||
target: crate::TRACING_TARGET,
|
||||
domain = crate::TRACING_DOMAIN_ROUTE_START,
|
||||
@@ -96,14 +115,36 @@ pub(crate) fn validate_route_start(
|
||||
route_id = request.route_id.as_str(),
|
||||
inventory_generation = request.inventory_generation,
|
||||
commitment = request.commitment.as_str(),
|
||||
"revalidated Start request and reconstructed exact Transport-owned Worker source contract without runtime I/O"
|
||||
"revalidated Start request and reconstructed exact Store/Transport-owned Worker launch resources"
|
||||
);
|
||||
return std::result::Result::Ok(crate::RawIngestRouteStartValidationDto {
|
||||
return std::result::Result::Ok(crate::PreparedRouteStart {
|
||||
commitment: request.commitment,
|
||||
inventory_generation: request.inventory_generation,
|
||||
network: network.to_owned(),
|
||||
profile_id: request.profile_id.clone(),
|
||||
route_id: request.route_id,
|
||||
store_settings: store.into_settings(),
|
||||
runtime_resources,
|
||||
});
|
||||
}
|
||||
|
||||
/// Revalidates one future Start request and destroys the reconstructed resources without opening Store or launching a Worker.
|
||||
pub(crate) fn validate_route_start(
|
||||
management: &ksp_config_lib::ConfigManagement,
|
||||
current_generation: u32,
|
||||
request: &crate::RawIngestRouteStartRequestDto,
|
||||
) -> ksp_core_lib::Result<crate::RawIngestRouteStartValidationDto> {
|
||||
let prepared = crate::prepare_route_start(management, current_generation, request);
|
||||
let prepared = match prepared {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
return std::result::Result::Ok(crate::RawIngestRouteStartValidationDto {
|
||||
commitment: prepared.commitment,
|
||||
inventory_generation: prepared.inventory_generation,
|
||||
network: prepared.network,
|
||||
profile_id: prepared.profile_id,
|
||||
route_id: prepared.route_id,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -111,7 +152,7 @@ fn prepare_standard_logs(
|
||||
transport: &ksp_config_lib::ResolvedTransportConfig,
|
||||
network: &str,
|
||||
commitment: ksp_onchain_transport_lib::SolanaCommitment,
|
||||
) -> ksp_core_lib::Result<()> {
|
||||
) -> ksp_core_lib::Result<ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources> {
|
||||
let endpoint =
|
||||
single_ws_endpoint(transport, network, ksp_onchain_transport_lib::WsProtocolKind::SolanaStandard, ksp_onchain_transport_lib::WsSubscriptionKind::Logs);
|
||||
let endpoint = match endpoint {
|
||||
@@ -139,15 +180,14 @@ fn prepare_standard_logs(
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
std::mem::drop(source);
|
||||
return std::result::Result::Ok(());
|
||||
return std::result::Result::Ok(ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources::from_standard_logs_source(source));
|
||||
}
|
||||
|
||||
fn prepare_standard_block(
|
||||
transport: &ksp_config_lib::ResolvedTransportConfig,
|
||||
network: &str,
|
||||
commitment: ksp_onchain_transport_lib::SolanaCommitment,
|
||||
) -> ksp_core_lib::Result<()> {
|
||||
) -> ksp_core_lib::Result<ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources> {
|
||||
let endpoint =
|
||||
single_ws_endpoint(transport, network, ksp_onchain_transport_lib::WsProtocolKind::SolanaStandard, ksp_onchain_transport_lib::WsSubscriptionKind::Block);
|
||||
let endpoint = match endpoint {
|
||||
@@ -163,8 +203,7 @@ fn prepare_standard_block(
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
std::mem::drop(source);
|
||||
return std::result::Result::Ok(());
|
||||
return std::result::Result::Ok(ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources::from_standard_block_source(source));
|
||||
}
|
||||
|
||||
fn prepare_helius(
|
||||
@@ -174,7 +213,7 @@ fn prepare_helius(
|
||||
base_transport: &ksp_config_lib::ResolvedTransportConfig,
|
||||
network: &str,
|
||||
commitment: ksp_onchain_transport_lib::SolanaCommitment,
|
||||
) -> ksp_core_lib::Result<()> {
|
||||
) -> ksp_core_lib::Result<ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources> {
|
||||
let transport = resolve_optional_transport(management, environment, composite, crate::COMPOSITE_COMPONENT_ID_TRANSPORT_HELIUS, network);
|
||||
let transport = match transport {
|
||||
std::result::Result::Ok(value) => value,
|
||||
@@ -214,8 +253,7 @@ fn prepare_helius(
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
std::mem::drop(source);
|
||||
return std::result::Result::Ok(());
|
||||
return std::result::Result::Ok(ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources::from_helius_transaction_source(source));
|
||||
}
|
||||
|
||||
fn prepare_yellowstone(
|
||||
@@ -225,7 +263,7 @@ fn prepare_yellowstone(
|
||||
base_transport: &ksp_config_lib::ResolvedTransportConfig,
|
||||
network: &str,
|
||||
commitment: ksp_onchain_transport_lib::SolanaCommitment,
|
||||
) -> ksp_core_lib::Result<()> {
|
||||
) -> ksp_core_lib::Result<ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources> {
|
||||
let transport = resolve_optional_transport(management, environment, composite, crate::COMPOSITE_COMPONENT_ID_TRANSPORT_YELLOWSTONE, network);
|
||||
let transport = match transport {
|
||||
std::result::Result::Ok(value) => value,
|
||||
@@ -267,15 +305,14 @@ fn prepare_yellowstone(
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
std::mem::drop(source);
|
||||
return std::result::Result::Ok(());
|
||||
return std::result::Result::Ok(ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources::new(source));
|
||||
}
|
||||
|
||||
fn prepare_http_polling(
|
||||
transport: &ksp_config_lib::ResolvedTransportConfig,
|
||||
network: &str,
|
||||
commitment: ksp_onchain_transport_lib::SolanaCommitment,
|
||||
) -> ksp_core_lib::Result<()> {
|
||||
) -> ksp_core_lib::Result<ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources> {
|
||||
let role = single_http_role(transport.http_settings(), network, &["getSlot", "getBlocksWithLimit", "getBlock"]);
|
||||
let role = match role {
|
||||
std::result::Result::Ok(value) => value,
|
||||
@@ -291,8 +328,7 @@ fn prepare_http_polling(
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
std::mem::drop(source);
|
||||
return std::result::Result::Ok(());
|
||||
return std::result::Result::Ok(ksp_worker_raw_transaction_ingest_lib::RawTransactionIngestRuntimeResources::from_http_block_polling_source(source));
|
||||
}
|
||||
|
||||
fn resolve_optional_transport(
|
||||
|
||||
Reference in New Issue
Block a user