fix: accept queued lifecycle assignments
This commit is contained in:
@@ -8444,6 +8444,7 @@ async fn scoped_restore_runtime_worker(
|
|||||||
.into());
|
.into());
|
||||||
}
|
}
|
||||||
assign_ticket_worker_from_lifecycle(&api, assignment, &runtime_id, &worker_id)?;
|
assign_ticket_worker_from_lifecycle(&api, assignment, &runtime_id, &worker_id)?;
|
||||||
|
accept_queued_ticket_after_worker_spawn(&api, assignment)?;
|
||||||
let worker = project_workspace_worker(&api, worker)?;
|
let worker = project_workspace_worker(&api, worker)?;
|
||||||
return Ok(Json(workspace_api::WorkerRestoreResponse {
|
return Ok(Json(workspace_api::WorkerRestoreResponse {
|
||||||
workspace_id,
|
workspace_id,
|
||||||
@@ -8464,6 +8465,7 @@ async fn scoped_restore_runtime_worker(
|
|||||||
.await?;
|
.await?;
|
||||||
if let Some(assignment) = assignment_request.as_ref() {
|
if let Some(assignment) = assignment_request.as_ref() {
|
||||||
assign_ticket_worker_from_lifecycle(&api, assignment, &runtime_id, &worker_id)?;
|
assign_ticket_worker_from_lifecycle(&api, assignment, &runtime_id, &worker_id)?;
|
||||||
|
accept_queued_ticket_after_worker_spawn(&api, assignment)?;
|
||||||
}
|
}
|
||||||
Ok(response)
|
Ok(response)
|
||||||
}
|
}
|
||||||
@@ -10747,6 +10749,7 @@ async fn create_runtime_worker(
|
|||||||
&runtime_id,
|
&runtime_id,
|
||||||
&worker.worker.worker_id,
|
&worker.worker.worker_id,
|
||||||
)?;
|
)?;
|
||||||
|
accept_queued_ticket_after_worker_spawn(&api, assignment)?;
|
||||||
return Ok(Json(WorkerSpawnResult {
|
return Ok(Json(WorkerSpawnResult {
|
||||||
state: WorkerOperationState::Accepted,
|
state: WorkerOperationState::Accepted,
|
||||||
worker: Some(worker),
|
worker: Some(worker),
|
||||||
@@ -10851,6 +10854,13 @@ async fn create_runtime_worker(
|
|||||||
)
|
)
|
||||||
.map_err(ApiError::from),
|
.map_err(ApiError::from),
|
||||||
)?;
|
)?;
|
||||||
|
finalize_worker_spawn_stage(
|
||||||
|
&api,
|
||||||
|
worker,
|
||||||
|
&compensation,
|
||||||
|
WorkerSpawnFinalizeStage::TicketStateAccept,
|
||||||
|
accept_queued_ticket_after_worker_spawn(&api, assignment).map_err(ApiError::from),
|
||||||
|
)?;
|
||||||
}
|
}
|
||||||
if worker.working_directory.is_none() {
|
if worker.working_directory.is_none() {
|
||||||
if let Some(workdir_id) = prepared_workdir_id.as_deref() {
|
if let Some(workdir_id) = prepared_workdir_id.as_deref() {
|
||||||
@@ -16364,7 +16374,7 @@ mod tests {
|
|||||||
let api = test_api(dir.path()).await;
|
let api = test_api(dir.path()).await;
|
||||||
let backend = browser_ticket_backend(&api).unwrap();
|
let backend = browser_ticket_backend(&api).unwrap();
|
||||||
let mut first_ticket_input = ticket::NewTicket::new("Spawn assignment");
|
let mut first_ticket_input = ticket::NewTicket::new("Spawn assignment");
|
||||||
first_ticket_input.workflow_state = Some(TicketWorkflowState::InProgress);
|
first_ticket_input.workflow_state = Some(TicketWorkflowState::Queued);
|
||||||
let first_ticket = backend.create(first_ticket_input).unwrap();
|
let first_ticket = backend.create(first_ticket_input).unwrap();
|
||||||
assign_test_orchestrator(&api, &first_ticket.id);
|
assign_test_orchestrator(&api, &first_ticket.id);
|
||||||
let request = WorkerSpawnRequest {
|
let request = WorkerSpawnRequest {
|
||||||
@@ -16421,6 +16431,14 @@ mod tests {
|
|||||||
.map(|worker| worker.worker_id),
|
.map(|worker| worker.worker_id),
|
||||||
Some(first_worker.worker.worker_id.clone())
|
Some(first_worker.worker.worker_id.clone())
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
backend
|
||||||
|
.show(first_ticket.id.clone().into())
|
||||||
|
.unwrap()
|
||||||
|
.meta
|
||||||
|
.workflow_state,
|
||||||
|
TicketWorkflowState::InProgress
|
||||||
|
);
|
||||||
let Json(retried) = scoped_create_runtime_worker(
|
let Json(retried) = scoped_create_runtime_worker(
|
||||||
State(api.clone()),
|
State(api.clone()),
|
||||||
AxumPath(ScopedRuntimePath {
|
AxumPath(ScopedRuntimePath {
|
||||||
@@ -16469,7 +16487,7 @@ mod tests {
|
|||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let mut second_ticket_input = ticket::NewTicket::new("Restore assignment");
|
let mut second_ticket_input = ticket::NewTicket::new("Restore assignment");
|
||||||
second_ticket_input.workflow_state = Some(TicketWorkflowState::InProgress);
|
second_ticket_input.workflow_state = Some(TicketWorkflowState::Queued);
|
||||||
let second_ticket = backend.create(second_ticket_input).unwrap();
|
let second_ticket = backend.create(second_ticket_input).unwrap();
|
||||||
assign_test_orchestrator(&api, &second_ticket.id);
|
assign_test_orchestrator(&api, &second_ticket.id);
|
||||||
let _ = scoped_restore_runtime_worker(
|
let _ = scoped_restore_runtime_worker(
|
||||||
@@ -16518,6 +16536,14 @@ mod tests {
|
|||||||
restored_assignment.worker.worker_id,
|
restored_assignment.worker.worker_id,
|
||||||
first_worker.worker.worker_id
|
first_worker.worker.worker_id
|
||||||
);
|
);
|
||||||
|
assert_eq!(
|
||||||
|
backend
|
||||||
|
.show(second_ticket.id.clone().into())
|
||||||
|
.unwrap()
|
||||||
|
.meta
|
||||||
|
.workflow_state,
|
||||||
|
TicketWorkflowState::InProgress
|
||||||
|
);
|
||||||
|
|
||||||
api.store
|
api.store
|
||||||
.clear_current_ticket_worker_assignment(
|
.clear_current_ticket_worker_assignment(
|
||||||
|
|||||||
Reference in New Issue
Block a user