mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-19 16:02:14 +00:00
fix: make workspace id change faster and add 100k jobs limit (#7500)
This commit is contained in:
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "UPDATE v2_job_queue SET workspace_id = $1\n WHERE id IN (\n SELECT id FROM v2_job_queue\n WHERE workspace_id = $2\n AND running = false\n AND id IN (SELECT id FROM v2_job WHERE workspace_id = $2 AND parent_job IS NULL)\n FOR UPDATE SKIP LOCKED\n )",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Varchar",
|
||||
"Text"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "29510e633e79d63ec28e8cf0ea5e7c0de3f9874cb4de0945b9b11eb988c5deb6"
|
||||
}
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "UPDATE v2_job_queue SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
"query": "UPDATE mqtt_trigger SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
@@ -11,5 +11,5 @@
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "0ea5ba568ec0f62b808fe938a41174646b6bdd658b8461db1bb90a871d076718"
|
||||
"hash": "35c7c7dd9c9887307dfa4288ef391ae9068080afa2de9b234332e91e16748060"
|
||||
}
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "UPDATE v2_job SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
"query": "UPDATE sqs_trigger SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
@@ -11,5 +11,5 @@
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "4244640e62fffb0f6978f8f7d78291b3294a6a7d1549d752f14acf5972552ba5"
|
||||
"hash": "380d2ef1082d8eb0847d24a24733ddfb6864384c3beb859ef0b4b3c2ce982837"
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "UPDATE gcp_trigger SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Varchar",
|
||||
"Text"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "64c01fc19684ae289a6cd57398effe91f4c8a575d8f60381125f09ab5789cbed"
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "UPDATE v2_job SET workspace_id = $1\n WHERE workspace_id = $2\n AND (id IN (SELECT id FROM v2_job_queue WHERE workspace_id = $1)\n OR id IN (SELECT id FROM v2_job_completed WHERE workspace_id = $1))",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Text",
|
||||
"Text"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "e2f7a1a48bb026df5c7155b76e166cd5a6ca2ab25926f70095328d5ea2d2bc7c"
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "UPDATE postgres_trigger SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
"describe": {
|
||||
"columns": [],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Varchar",
|
||||
"Text"
|
||||
]
|
||||
},
|
||||
"nullable": []
|
||||
},
|
||||
"hash": "e9550a157d2914787c7741dbc4568a16542c598b029f0f7e97882cb12d5cbad1"
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"db_name": "PostgreSQL",
|
||||
"query": "SELECT COUNT(*) FROM v2_job WHERE workspace_id = $1",
|
||||
"describe": {
|
||||
"columns": [
|
||||
{
|
||||
"ordinal": 0,
|
||||
"name": "count",
|
||||
"type_info": "Int8"
|
||||
}
|
||||
],
|
||||
"parameters": {
|
||||
"Left": [
|
||||
"Text"
|
||||
]
|
||||
},
|
||||
"nullable": [
|
||||
null
|
||||
]
|
||||
},
|
||||
"hash": "f863cb7ec416d774dc4c8170b2f5ec974b035405da38bf3e7764f7e22232b760"
|
||||
}
|
||||
@@ -47,6 +47,24 @@ pub(crate) async fn change_workspace_id(
|
||||
require_admin(authed.is_admin, &authed.username)?;
|
||||
}
|
||||
|
||||
// Check total job count before attempting migration
|
||||
let job_count = sqlx::query_scalar!(
|
||||
"SELECT COUNT(*) FROM v2_job WHERE workspace_id = $1",
|
||||
&old_id
|
||||
)
|
||||
.fetch_one(&db)
|
||||
.await?
|
||||
.unwrap_or(0);
|
||||
|
||||
if job_count > 100_000 {
|
||||
return Err(Error::BadRequest(
|
||||
format!(
|
||||
"Workspace has {} jobs which exceeds the 100k limit for direct migration. Please use the Windmill CLI to migrate jobs instead: `wmill jobs pull/push`.",
|
||||
job_count
|
||||
)
|
||||
));
|
||||
}
|
||||
|
||||
let mut tx = db.begin().await?;
|
||||
|
||||
check_w_id_conflict(&mut tx, &rw.new_id).await?;
|
||||
@@ -133,6 +151,38 @@ pub(crate) async fn change_workspace_id(
|
||||
.execute(&mut *tx)
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
"UPDATE postgres_trigger SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
&rw.new_id,
|
||||
&old_id
|
||||
)
|
||||
.execute(&mut *tx)
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
"UPDATE mqtt_trigger SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
&rw.new_id,
|
||||
&old_id
|
||||
)
|
||||
.execute(&mut *tx)
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
"UPDATE gcp_trigger SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
&rw.new_id,
|
||||
&old_id
|
||||
)
|
||||
.execute(&mut *tx)
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
"UPDATE sqs_trigger SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
&rw.new_id,
|
||||
&old_id
|
||||
)
|
||||
.execute(&mut *tx)
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
"UPDATE v2_job_completed SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
&rw.new_id,
|
||||
@@ -275,7 +325,14 @@ pub(crate) async fn change_workspace_id(
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
"UPDATE v2_job_queue SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
"UPDATE v2_job_queue SET workspace_id = $1
|
||||
WHERE id IN (
|
||||
SELECT id FROM v2_job_queue
|
||||
WHERE workspace_id = $2
|
||||
AND running = false
|
||||
AND id IN (SELECT id FROM v2_job WHERE workspace_id = $2 AND parent_job IS NULL)
|
||||
FOR UPDATE SKIP LOCKED
|
||||
)",
|
||||
&rw.new_id,
|
||||
&old_id
|
||||
)
|
||||
@@ -283,7 +340,10 @@ pub(crate) async fn change_workspace_id(
|
||||
.await?;
|
||||
|
||||
sqlx::query!(
|
||||
"UPDATE v2_job SET workspace_id = $1 WHERE workspace_id = $2",
|
||||
"UPDATE v2_job SET workspace_id = $1
|
||||
WHERE workspace_id = $2
|
||||
AND (id IN (SELECT id FROM v2_job_queue WHERE workspace_id = $1)
|
||||
OR id IN (SELECT id FROM v2_job_completed WHERE workspace_id = $1))",
|
||||
&rw.new_id,
|
||||
&old_id
|
||||
)
|
||||
|
||||
@@ -80,9 +80,12 @@
|
||||
|
||||
<Modal bind:open title="Change workspace ID">
|
||||
<div class="flex flex-col gap-4">
|
||||
<Alert type="warning" title="Warning">
|
||||
Renaming the workspace may take a few minutes to complete. Once finished, please update your
|
||||
webhook calls and adjust your CLI sync configuration accordingly.
|
||||
<Alert type="info" title="Changing the workspace ID may take a few minutes to complete">
|
||||
Once finished, please update your webhook calls and adjust your CLI sync configuration
|
||||
accordingly.
|
||||
</Alert>
|
||||
<Alert type="warning" title="Running jobs and queued flow steps will not be migrated.">
|
||||
Make sure that all your jobs are completed before changing the workspace ID.
|
||||
</Alert>
|
||||
<p class="text-secondary text-xs"
|
||||
>Current ID <br /> <span class="text-emphasis">{$workspaceStore ?? ''}</span></p
|
||||
|
||||
Reference in New Issue
Block a user