Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions _local/server/config-auth.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ auth:
permissionGroupMapping:
submit_any_jobs: ["admins"]
create_queue: ["admins"]
create_retry_policy: ["admins"]
update_retry_policy: ["admins"]
delete_retry_policy: ["admins"]
delete_queue: ["admins"]
cancel_any_jobs: ["admins"]
reprioritize_any_jobs: ["admins"]
Expand Down
3 changes: 3 additions & 0 deletions _local/server/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ auth:
permissionGroupMapping:
submit_any_jobs: ["everyone"]
create_queue: ["everyone"]
create_retry_policy: ["everyone"]
update_retry_policy: ["everyone"]
delete_retry_policy: ["everyone"]
delete_queue: ["everyone"]
cancel_any_jobs: ["everyone"]
reprioritize_any_jobs: ["everyone"]
Expand Down
1 change: 1 addition & 0 deletions cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ func main() {
config.CorsAllowedOrigins,
api.SwaggerJsonTemplate(),
api.RegisterSubmitHandler,
api.RegisterRetryPolicyServiceHandler,
api.RegisterEventHandler,
api.RegisterJobsHandler,
schedulerobjects.RegisterSchedulerReportingHandler,
Expand Down
25 changes: 25 additions & 0 deletions internal/lookout/schema/migrations/035_create_retry_policy.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
CREATE TABLE IF NOT EXISTS retry_policy
(
name text NOT NULL PRIMARY KEY,
definition bytea NOT NULL
);

-- Source of truth for a queue's attachments; the serialized queue definition
-- does not carry them. ordinal is the policy's position in the submitted list.
CREATE TABLE IF NOT EXISTS queue_retry_policy
(
queue_name text NOT NULL,
policy_name text NOT NULL,
ordinal int NOT NULL,
PRIMARY KEY (queue_name, policy_name),
CONSTRAINT queue_retry_policy_queue_name_fkey
FOREIGN KEY (queue_name) REFERENCES queue (name) ON DELETE CASCADE,
-- Named explicitly because upsertQueue matches on this constraint name to
-- turn a foreign key violation into ErrUnknownRetryPolicies.
CONSTRAINT queue_retry_policy_policy_name_fkey
FOREIGN KEY (policy_name) REFERENCES retry_policy (name) ON DELETE CASCADE
);

-- The primary key indexes policy_name only as a trailing column, so deleting a
-- policy would otherwise scan the table.
CREATE INDEX IF NOT EXISTS idx_queue_retry_policy_policy_name ON queue_retry_policy (policy_name);
1 change: 1 addition & 0 deletions internal/server/mocks/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ package mocks
//go:generate mockgen -destination=./mock_deduplicator.go -package=mocks "github.com/armadaproject/armada/internal/server/submit" Deduplicator
//go:generate mockgen -destination=./mock_authorizer.go -package=mocks "github.com/armadaproject/armada/internal/common/auth" ActionAuthorizer
//go:generate mockgen -destination=./mock_repository.go -package=mocks "github.com/armadaproject/armada/internal/server/queue" QueueRepository
//go:generate mockgen -destination=./mock_retry_policy_repository.go -package=mocks "github.com/armadaproject/armada/internal/server/retrypolicy" RetryPolicyRepository
115 changes: 115 additions & 0 deletions internal/server/mocks/mock_retry_policy_repository.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions internal/server/permissions/permissions.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,7 @@ const (
CordonNodes = "cordon_nodes"
ExecuteJobs = "execute_jobs"
UpdateExecutorSettings = "update_executor_settings"
CreateRetryPolicy = "create_retry_policy"
UpdateRetryPolicy = "update_retry_policy"
DeleteRetryPolicy = "delete_retry_policy"
Comment thread
greptile-apps[bot] marked this conversation as resolved.
)
11 changes: 11 additions & 0 deletions internal/server/queryapi/database/models.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 39 additions & 0 deletions internal/server/queryapi/database/query.sql
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,42 @@ WHERE queue=sqlc.arg(queue)::text

-- name: GetActiveQueuesByPool :many
SELECT DISTINCT jr.pool, j.queue FROM job j JOIN job_run jr ON j.job_id = jr.job_id WHERE j.state IN (2, 3, 8) AND jr.job_run_state IN (1, 2, 11) ORDER BY jr.pool, j.queue;

-- name: GetAllRetryPolicies :many
SELECT definition FROM retry_policy ORDER BY name;

-- name: GetRetryPolicy :one
SELECT definition FROM retry_policy WHERE name = sqlc.arg(name)::text;

-- name: CreateRetryPolicy :exec
INSERT INTO retry_policy (name, definition)
VALUES (sqlc.arg(name)::text, sqlc.arg(definition)::bytea)
ON CONFLICT (name) DO UPDATE SET definition = EXCLUDED.definition;

-- name: UpdateRetryPolicy :execrows
UPDATE retry_policy SET definition = sqlc.arg(definition)::bytea WHERE name = sqlc.arg(name)::text;

-- name: DeleteRetryPolicy :exec
DELETE FROM retry_policy WHERE name = sqlc.arg(name)::text;

-- name: GetExistingRetryPolicyNames :many
SELECT name FROM retry_policy WHERE name = ANY(sqlc.arg(names)::text[]);

-- name: DeleteRetryPolicyAttachments :many
DELETE FROM queue_retry_policy WHERE policy_name = sqlc.arg(policy_name)::text RETURNING queue_name;

-- name: GetAllQueueRetryPolicies :many
SELECT queue_name, policy_name FROM queue_retry_policy ORDER BY queue_name, ordinal;

-- name: GetQueueRetryPolicies :many
SELECT policy_name FROM queue_retry_policy WHERE queue_name = sqlc.arg(queue_name)::text ORDER BY ordinal;

-- name: DeleteQueueRetryPolicies :exec
DELETE FROM queue_retry_policy WHERE queue_name = sqlc.arg(queue_name)::text;

-- name: InsertQueueRetryPolicy :exec
-- A name repeated in one queue's list collapses onto the row from its first
-- occurrence, keeping that position's ordinal.
INSERT INTO queue_retry_policy (queue_name, policy_name, ordinal)
VALUES (sqlc.arg(queue_name)::text, sqlc.arg(policy_name)::text, sqlc.arg(ordinal)::int)
ON CONFLICT (queue_name, policy_name) DO NOTHING;
Loading
Loading