fix queue failing for certain edge cases (#51)

This commit is contained in:
KM Koushik
2024-08-10 20:54:58 +10:00
committed by GitHub
parent 1e77e47597
commit e126555be1
2 changed files with 18 additions and 6 deletions

View File

@@ -21,8 +21,11 @@ import { toast } from "@unsend/ui/src/toaster";
const FormSchema = z.object({ const FormSchema = z.object({
region: z.string(), region: z.string(),
unsendUrl: z.string().url(), unsendUrl: z.string().url(),
sendRate: z.number(), sendRate: z.preprocess((val) => Number(val), z.number()),
transactionalQuota: z.number().min(0).max(100), transactionalQuota: z.preprocess(
(val) => Number(val),
z.number().min(0).max(100)
),
}); });
type SesSettingsProps = { type SesSettingsProps = {

View File

@@ -54,14 +54,19 @@ export class EmailQueueService {
); );
const transactionalWorker = this.transactionalWorker.get(region); const transactionalWorker = this.transactionalWorker.get(region);
if (transactionalWorker) { if (transactionalWorker) {
transactionalWorker.concurrency = transactionalQuota; transactionalWorker.concurrency =
transactionalQuota !== 0 ? transactionalQuota : 1;
} }
} else { } else {
console.log( console.log(
`[EmailQueueService]: Creating transactional queue for region ${region} with quota ${transactionalQuota}` `[EmailQueueService]: Creating transactional queue for region ${region} with quota ${transactionalQuota}`
); );
const { queue: transactionalQueue, worker: transactionalWorker } = const { queue: transactionalQueue, worker: transactionalWorker } =
createQueueAndWorker(region, transactionalQuota ?? 1, "transaction"); createQueueAndWorker(
region,
transactionalQuota !== 0 ? transactionalQuota : 1,
"transaction"
);
this.transactionalQueue.set(region, transactionalQueue); this.transactionalQueue.set(region, transactionalQueue);
this.transactionalWorker.set(region, transactionalWorker); this.transactionalWorker.set(region, transactionalWorker);
} }
@@ -72,14 +77,18 @@ export class EmailQueueService {
); );
const marketingWorker = this.marketingWorker.get(region); const marketingWorker = this.marketingWorker.get(region);
if (marketingWorker) { if (marketingWorker) {
marketingWorker.concurrency = marketingQuota; marketingWorker.concurrency = marketingQuota !== 0 ? marketingQuota : 1;
} }
} else { } else {
console.log( console.log(
`[EmailQueueService]: Creating marketing queue for region ${region} with quota ${marketingQuota}` `[EmailQueueService]: Creating marketing queue for region ${region} with quota ${marketingQuota}`
); );
const { queue: marketingQueue, worker: marketingWorker } = const { queue: marketingQueue, worker: marketingWorker } =
createQueueAndWorker(region, marketingQuota ?? 1, "marketing"); createQueueAndWorker(
region,
marketingQuota !== 0 ? marketingQuota : 1,
"marketing"
);
this.marketingQueue.set(region, marketingQueue); this.marketingQueue.set(region, marketingQueue);
this.marketingWorker.set(region, marketingWorker); this.marketingWorker.set(region, marketingWorker);
} }