refactor: switch to public static instead of setter in configuration
[e-mobility-charging-stations-simulator.git] / src / worker / WorkerSet.ts
index c1fecdcec2f7f6b03adfe412a2bfe18c8d997935..39e8eca388bdd402fb8f5d3c73e5d3eda960ba1f 100644 (file)
@@ -19,6 +19,7 @@ import { sleep } from './WorkerUtils';
 export class WorkerSet extends WorkerAbstract<WorkerData> {
   public readonly emitter!: EventEmitter;
   private readonly workerSet: Set<WorkerSetElement>;
+  private workerStartup: boolean;
 
   /**
    * Creates a new `WorkerSet`.
@@ -48,6 +49,7 @@ export class WorkerSet extends WorkerAbstract<WorkerData> {
     if (this.workerOptions.poolOptions?.enableEvents) {
       this.emitter = new EventEmitter();
     }
+    this.workerStartup = false;
   }
 
   get info(): SetInfo {
@@ -114,6 +116,7 @@ export class WorkerSet extends WorkerAbstract<WorkerData> {
    * Adds a new `WorkerSetElement`.
    */
   private addWorkerSetElement(): WorkerSetElement {
+    this.workerStartup = true;
     const worker = new Worker(this.workerScript, {
       env: SHARE_ENV,
       ...this.workerOptions.poolOptions?.workerOptions,
@@ -129,7 +132,7 @@ export class WorkerSet extends WorkerAbstract<WorkerData> {
     worker.on('error', this.workerOptions.poolOptions?.errorHandler ?? EMPTY_FUNCTION);
     worker.on('error', (error) => {
       this.emitter?.emit(WorkerSetEvents.error, error);
-      if (this.workerOptions.poolOptions?.restartWorkerOnError) {
+      if (this.workerOptions.poolOptions?.restartWorkerOnError && !this.workerStartup) {
         this.addWorkerSetElement();
       }
     });
@@ -140,6 +143,7 @@ export class WorkerSet extends WorkerAbstract<WorkerData> {
     );
     const workerSetElement: WorkerSetElement = { worker, numberOfWorkerElements: 0 };
     this.workerSet.add(workerSetElement);
+    this.workerStartup = false;
     return workerSetElement;
   }