Drop per-task port blocks; previews use any free loopback port
This commit is contained in:
@@ -43,6 +43,36 @@ func (s *Store) SetPreview(ctx context.Context, p api.Preview, actor string) ([]
|
||||
return err
|
||||
}
|
||||
|
||||
rows, err = tx.QueryContext(ctx, `
|
||||
DELETE FROM previews WHERE port = ? AND task_id != ? AND task_id IN (SELECT id FROM tasks WHERE status = ?)
|
||||
RETURNING task_id, name, (SELECT project_id FROM tasks WHERE id = previews.task_id)
|
||||
`, p.Port, p.TaskId, string(api.TaskStatusActive))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
taken := []api.Event{}
|
||||
for rows.Next() {
|
||||
taskID, name, project := "", "", ""
|
||||
err = rows.Scan(&taskID, &name, &project)
|
||||
if err != nil {
|
||||
rows.Close()
|
||||
return err
|
||||
}
|
||||
taken = append(taken, api.Event{Kind: "preview.taken", ProjectId: &project, TaskId: &taskID, Actor: actor,
|
||||
Payload: map[string]any{"name": name, "port": p.Port, "by_task_id": p.TaskId}})
|
||||
}
|
||||
rows.Close()
|
||||
err = rows.Err()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, ev := range taken {
|
||||
err = emit(ev)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
_, err = tx.ExecContext(ctx, `INSERT INTO previews (`+previewColumns+`) VALUES (?, ?, ?, ?)`, p.TaskId, p.Name, p.Port, formatTime(p.CreatedAt))
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user