diff --git a/config/config.example.toml b/config/config.example.toml index b59e016f..f19696c5 100644 --- a/config/config.example.toml +++ b/config/config.example.toml @@ -259,6 +259,21 @@ language = "en" # A style name from https://www.dicebear.com/styles placeholder_style = "thumbs" +[queues] +# Control the delivery queue (for outbound federation) +[queues.delivery] +# Time in seconds to remove completed jobs +remove_on_complete = 31536000 +# Time in seconds to remove failed jobs +remove_on_failure = 31536000 + +# Control the inbox processing queue (for inbound federation) +[queues.inbox] +# Time in seconds to remove completed jobs +remove_on_complete = 31536000 +# Time in seconds to remove failed jobs +remove_on_failure = 31536000 + [federation] # This is a list of domain names, such as "mastodon.social" or "pleroma.site" # These changes will not retroactively apply to existing data before they were changed diff --git a/config/config.schema.json b/config/config.schema.json index 5df026bb..e4738e5d 100644 --- a/config/config.schema.json +++ b/config/config.schema.json @@ -3298,6 +3298,58 @@ } } }, + "queues": { + "type": "object", + "properties": { + "delivery": { + "type": "object", + "properties": { + "remove_on_complete": { + "type": "integer", + "default": 31536000 + }, + "remove_on_failure": { + "type": "integer", + "default": 31536000 + } + }, + "additionalProperties": false, + "default": { + "remove_on_complete": 31536000, + "remove_on_failure": 31536000 + } + }, + "inbox": { + "type": "object", + "properties": { + "remove_on_complete": { + "type": "integer", + "default": 31536000 + }, + "remove_on_failure": { + "type": "integer", + "default": 31536000 + } + }, + "additionalProperties": false, + "default": { + "remove_on_complete": 31536000, + "remove_on_failure": 31536000 + } + } + }, + "additionalProperties": false, + "default": { + "delivery": { + "remove_on_complete": 31536000, + "remove_on_failure": 31536000 + }, + "inbox": { + "remove_on_complete": 31536000, + "remove_on_failure": 31536000 + } + } + }, "instance": { "type": "object", "properties": { diff --git a/packages/config-manager/config.type.ts b/packages/config-manager/config.type.ts index 13352e0d..a1021f06 100644 --- a/packages/config-manager/config.type.ts +++ b/packages/config-manager/config.type.ts @@ -525,6 +525,53 @@ export const configValidator = z token: "", }, }), + queues: z + .object({ + delivery: z + .object({ + remove_on_complete: z + .number() + .int() + // 1 year + .default(60 * 60 * 24 * 365), + remove_on_failure: z + .number() + .int() + // 1 year + .default(60 * 60 * 24 * 365), + }) + .default({ + remove_on_complete: 60 * 60 * 24 * 365, + remove_on_failure: 60 * 60 * 24 * 365, + }), + inbox: z + .object({ + remove_on_complete: z + .number() + .int() + // 1 year + .default(60 * 60 * 24 * 365), + remove_on_failure: z + .number() + .int() + // 1 year + .default(60 * 60 * 24 * 365), + }) + .default({ + remove_on_complete: 60 * 60 * 24 * 365, + remove_on_failure: 60 * 60 * 24 * 365, + }), + }) + .default({ + delivery: { + remove_on_complete: 60 * 60 * 24 * 365, + remove_on_failure: 60 * 60 * 24 * 365, + }, + inbox: { + remove_on_complete: 60 * 60 * 24 * 365, + remove_on_failure: 60 * 60 * 24 * 365, + }, + }), instance: z .object({ name: z.string().min(1).default("Versia"), diff --git a/worker.ts b/worker.ts index b884860e..6c7ca2d2 100644 --- a/worker.ts +++ b/worker.ts @@ -104,7 +104,15 @@ export const deliveryWorker = new Worker< } } }, - { connection }, + { + connection, + removeOnComplete: { + age: config.queues.delivery.remove_on_complete, + }, + removeOnFail: { + age: config.queues.delivery.remove_on_failure, + }, + }, ); export const inboxWorker = new Worker( @@ -242,5 +250,13 @@ export const inboxWorker = new Worker( } } }, - { connection, removeOnComplete: { count: 0 } }, + { + connection, + removeOnComplete: { + age: config.queues.inbox.remove_on_complete, + }, + removeOnFail: { + age: config.queues.inbox.remove_on_failure, + }, + }, );