fix: route worker consoles through logical resources

This commit is contained in:
2026-09-07 03:53:34 +09:00
parent f1baea1705
commit f5c5ea5a0b
16 changed files with 114 additions and 98 deletions
+26 -7
View File
@@ -13439,6 +13439,14 @@ fn browser_worker_spawn_policy(
}
}
fn browser_worker_console_href(workspace_id: &str, resource_key: &str) -> String {
format!(
"/w/{}/workers/{}/console",
encode_path_segment(workspace_id),
encode_path_segment(resource_key)
)
}
async fn create_workspace_worker(
State(api): State<WorkspaceApi>,
headers: HeaderMap,
@@ -13750,18 +13758,22 @@ fn browser_worker_response_from_summary(
let runtime_id = worker.worker.runtime_id.clone();
let worker_id = worker.worker.worker_id.clone();
let workspace_id = api.workspace_id().to_string();
let console_href = format!(
"/w/{}/runtimes/{}/workers/{}/console",
encode_path_segment(&workspace_id),
encode_path_segment(&runtime_id),
encode_path_segment(&worker_id)
);
let resource_key = api
.store
.resource_key(&workspace_id, WorkspaceResourceKind::Worker, &worker_id)?
.ok_or_else(|| {
Error::Store(format!(
"Workspace Worker `{worker_id}` has no resource key after registration"
))
})?;
let worker = worker_launch_worker_summary(worker);
let console_href = browser_worker_console_href(&workspace_id, &resource_key);
Ok(BrowserCreateWorkerResponse {
workspace_id,
runtime_id,
worker_id,
console_href,
worker: worker_launch_worker_summary(worker),
worker,
diagnostics: diagnostics
.into_iter()
.map(workspace_api::Diagnostic::from)
@@ -17193,6 +17205,13 @@ mod tests {
SqliteWorkspaceStore, UserRecord, WorkspaceRecord, WorkspaceRuntimeBinding,
};
#[test]
fn browser_worker_console_href_uses_logical_worker_route() {
let href = browser_worker_console_href("workspace/one", "W-7");
assert_eq!(href, "/w/workspace%2Fone/workers/W-7/console");
assert!(!href.contains("/runtimes/"));
}
#[tokio::test]
async fn workspace_mutation_gate_serializes_deletion_with_active_mutations() {
let locks = Arc::new(AsyncMutex::new(HashMap::new()));