Skip to content

Bree Workers Won't Follow closeWorkerAfterMs rule #227

@mhofwell

Description

@mhofwell

Hello,

I am using Bree to execute Cron 1 which ingests data from an API to my DB. Cron 2 then executes and uses DB data to spawn several workers operating Cron 3 with different data for each worker. Cron 3 runs on an infinite loop for each worker, even though it has a closeWorkerAfterMs, process.exit(0) command and the parentPort.postMessage('done').

Cron 2: "cronFactory.js"

`
import path from 'path';
import ms from 'ms';
import Bree from 'bree';
import { PrismaClient } from '@prisma/client';

const cronFactory = async () => {
const prisma = new PrismaClient();

const fixtures = await prisma.fixtures.findMany();
const appDir =
    '/Users/bigviking/Documents/GitHub/Projects/blackjack/server/';

let newCronJobs = [];

fixtures.forEach((fixture) => {
    newCronJobs.push({
        name: `gw-worker-${fixture.kickoff_time}`,
        path: path.join(appDir + '/jobs', 'updateGoals.js'),
        interval: '1s',
        closeWorkerAfterMs: ms('2s'),
        outputWorkerMetadata: true,
        worker: {
            workerData: {
                kickoff_time: fixture.kickoff_time,
                numberOfFixtures: fixture.number_of_fixtures,
            },
        },
    });
});

console.log(newCronJobs);

const cron = new Bree({
    root: false,
    jobs: newCronJobs,
    closeWorkerAfterMs: ms('2s'),
    errorHandler: (error, workerMetadata) => {
        // workerMetadata will be populated with extended worker information only if
        // Bree instance is initialized with parameter `workerMetadata: true`
        if (workerMetadata.threadId) {
            console.log(
                `There was an error while running a worker ${workerMetadata.name} with thread ID: ${workerMetadata.threadId}`
            );
        } else {
            console.log(
                `There was an error while running a worker ${workerMetadata.name}`
            );
        }
        console.error(error);
        errorService.captureException(error);
    },
});
await cron.start();

};

cronFactory();
`

Cron 3: goalUpdate.js

`import { parentPort, workerData } from 'worker_threads';

const goalUpdate = async () => {
if (parentPort) parentPort.postMessage('done');
else process.exit(0);
};

goalUpdate();`

The console output runs infinitely, threadID's keep climbing. Help?
Screenshot 2023-10-03 at 2 49 27 PM

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions