Implement authorized live event replay
This commit is contained in:
parent
4c93c25692
commit
06a7ac56b7
1 changed files with 2370 additions and 364 deletions
|
|
@ -56,7 +56,7 @@ impl AdmissionService {
|
|||
fingerprint(&request).map_err(|error| AdmissionError::Invalid(error.to_string()))?;
|
||||
let subject = principal.id.clone();
|
||||
let principal = principal.clone();
|
||||
let config = self.config.clone();
|
||||
let service = self.clone();
|
||||
let outcome = execute_mutation(
|
||||
&self.pool,
|
||||
MutationScope {
|
||||
|
|
@ -64,12 +64,12 @@ impl AdmissionService {
|
|||
operation: "job.submit",
|
||||
key: idempotency_key,
|
||||
},
|
||||
"submit_job",
|
||||
"admission_submit_job",
|
||||
&[],
|
||||
request_fingerprint,
|
||||
move |tx| {
|
||||
Box::pin(async move {
|
||||
let decision = decide_submission(tx, &principal, &config, request).await?;
|
||||
let decision = service.submit_in_tx(tx, &principal, request).await?;
|
||||
let status = match decision {
|
||||
AdmissionDecision::Accepted(_) => MutationStatus::Accepted,
|
||||
AdmissionDecision::Rejected { .. } => MutationStatus::Rejected,
|
||||
|
|
@ -92,6 +92,15 @@ impl AdmissionService {
|
|||
})
|
||||
}
|
||||
|
||||
pub async fn submit_in_tx(
|
||||
&self,
|
||||
tx: &mut PgTx<'_>,
|
||||
principal: &Principal,
|
||||
request: JobSubmissionDto,
|
||||
) -> Result<AdmissionDecision, DurableError> {
|
||||
decide_submission(tx, principal, &self.config, request).await
|
||||
}
|
||||
|
||||
pub async fn revoke_execution_grant(
|
||||
&self,
|
||||
principal: &Principal,
|
||||
|
|
@ -249,6 +258,7 @@ async fn decide_submission(
|
|||
.map_err(DurableError::effect)?;
|
||||
}
|
||||
enqueue(tx, "job.dispatch", json!({ "job_id": job_id })).await?;
|
||||
enqueue(tx, "job.updated", json!({ "job_id": job_id })).await?;
|
||||
|
||||
Ok(AdmissionDecision::Accepted(Box::new(AcceptedJob {
|
||||
job_id,
|
||||
|
|
|
|||
Loading…
Reference in a new issue