You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The problem I'm facing is a confusing (from job developer perspective) use of the data (workerData) passed into the worker. After looking closer into how workerData parameter is constructed, I have a proposal on how to structure it so it's more intuitive for the job developer.
Let's consider an example bree job initialization with a value passed in:
// bree client configuring a job with passed in dataconstjob={cron:'0/5 * * * * *',name:'job-with-data',path:'/path/to/job-using-data.js',worker:{workerData: 42}};bree.add(job);bree.start('job-with-data');
// job-using-data.js file contentconst{workerData}=require('worker_threads');(async()=>{constdata=workerData.job.worker.workerData;console.log(data);// prints '42'})();
To get access to the data inside of the job file job developer has have knowledge about quite complicated bree's internal object structure workerData.job.worker.workerData. This structure doesn't match 1:1 to the parameter passed during the job initialization. As a developer writing a job, I would expect to have access to same data structure as if I initialized a job through native Worker constructor:
// job-using-data.js file contentconst{workerData}=require('worker_threads');(async()=>{constdata=workerData;console.log(data);// prints '42'})();
I don't see a good reason why bree job would need to have all the meta information about itself accessible from within the script. I think it's unnecessary for the job to know about it's name, interval or any other bree's internal configurations. It should be up to bree's client to use these configurations and the job itself should execute in self contained manner, with as little knowledge as possible. @niftylettuce what are your thoughts? Could you please clarify the usecase for passing in job metadata into workerData parameter?
Proposed change
I think initializing worker in following way would make reading workerData inside of jobs most intuitive:
The problem I'm facing is a confusing (from job developer perspective) use of the data (
workerData
) passed into the worker. After looking closer into how workerData parameter is constructed, I have a proposal on how to structure it so it's more intuitive for the job developer.Let's consider an example bree job initialization with a value passed in:
To get access to the data inside of the job file job developer has have knowledge about quite complicated bree's internal object structure
workerData.job.worker.workerData
. This structure doesn't match 1:1 to the parameter passed during the job initialization. As a developer writing a job, I would expect to have access to same data structure as if I initialized a job through native Worker constructor:I don't see a good reason why bree job would need to have all the meta information about itself accessible from within the script. I think it's unnecessary for the job to know about it's name, interval or any other bree's internal configurations. It should be up to bree's client to use these configurations and the job itself should execute in self contained manner, with as little knowledge as possible. @niftylettuce what are your thoughts? Could you please clarify the usecase for passing in job metadata into
workerData
parameter?Proposed change
I think initializing worker in following way would make reading
workerData
inside of jobs most intuitive:The text was updated successfully, but these errors were encountered: