Skip to content

Commit aa5f965

Browse files
authored
Merge pull request #40 from hellivan/develop
Release
2 parents 57edaa8 + 24b03b5 commit aa5f965

11 files changed

+69
-13
lines changed

src/data-structures/limited-observable-queue.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { QueueError } from '../errors';
12
import { ObservableQueue } from './observable-queue';
23

34
export class LimitedObservableQueue<T> extends ObservableQueue<T> {
@@ -25,7 +26,7 @@ export class LimitedObservableQueue<T> extends ObservableQueue<T> {
2526
}
2627

2728
public enqueue(item: T): void {
28-
if (this.full) throw new Error('Queue full! Cannot enqueue any more items!');
29+
if (this.full) throw new QueueError('Queue full! Cannot enqueue any more items!');
2930
super.enqueue(item);
3031
}
3132
}

src/errors/execution-timeout-error.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export class ExecutionTimeoutError extends Error {
2+
public readonly code = 'NTSU_EXEC_TIMEOUT';
3+
4+
constructor(message: string) {
5+
super(message);
6+
Object.setPrototypeOf(this, ExecutionTimeoutError.prototype);
7+
}
8+
}

src/errors/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export { ExecutionTimeoutError } from './execution-timeout-error';
2+
export { QueueError } from './queue-error';
3+
export { WorkerError } from './worker-error';
4+
export { WorkerPoolError } from './worker-pool-error';

src/errors/queue-error.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export class QueueError extends Error {
2+
public readonly code = 'NTSU_QUEUE_ERROR';
3+
4+
constructor(message: string) {
5+
super(message);
6+
Object.setPrototypeOf(this, QueueError.prototype);
7+
}
8+
}

src/errors/worker-error.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export class WorkerError extends Error {
2+
public readonly code = 'NTSU_WORKER_ERROR';
3+
4+
constructor(message: string) {
5+
super(message);
6+
Object.setPrototypeOf(this, WorkerError.prototype);
7+
}
8+
}

src/errors/worker-pool-error.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export class WorkerPoolError extends Error {
2+
public readonly code = 'NTSU_WORKER_POOL_ERROR';
3+
4+
constructor(message: string) {
5+
super(message);
6+
Object.setPrototypeOf(this, WorkerPoolError.prototype);
7+
}
8+
}

src/index.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import {
2+
ExecutionTimeoutError,
23
DynamicWorkerPool,
34
DynamicWorkerPoolWorker,
5+
QueueError,
6+
WorkerError,
47
WorkerFactory,
58
WorkerPool,
9+
WorkerPoolError,
610
WorkerThreadTask,
711
WorkerThreadWorker,
812
QdScheduler
@@ -15,6 +19,14 @@ describe('exports', () => {
1519
expect(WorkerThreadWorker).toBeDefined();
1620

1721
expect(QdScheduler).toBeDefined();
22+
23+
expect(ExecutionTimeoutError).toBeDefined();
24+
25+
expect(QueueError).toBeDefined();
26+
27+
expect(WorkerError).toBeDefined();
28+
29+
expect(WorkerPoolError).toBeDefined();
1830
});
1931

2032
test('interfaces must be exported', () => {

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export { ExecutionTimeoutError, QueueError, WorkerError, WorkerPoolError } from './errors';
12
export { WorkerThreadTask, WorkerThreadWorker } from './workers';
23
export { WorkerFactory } from './worker-factory';
34
export { DynamicWorkerPool, DynamicWorkerPoolWorker, WorkerPool } from './worker-pool';

src/worker-pool/dynamic-worker-pool.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { BehaviorSubject, distinctUntilChanged, filter, firstValueFrom, Observable, Subject } from 'rxjs';
22

33
import { ObservableQueue } from '../data-structures';
4+
import { WorkerPoolError } from '../errors';
45
import { WorkerFactory } from '../worker-factory';
56
import { AbstractWorkerPool, AbstractWorkerPoolWorker } from './abstract-worker-pool';
67
import { IdleWorkerDescription } from './idle-worker-description';
@@ -78,7 +79,7 @@ export class DynamicWorkerPool<
7879

7980
protected aquireWorker(): TWorker {
8081
if (this.stopped) {
81-
throw new Error('Cannot aquire worker from stopped worker pool!');
82+
throw new WorkerPoolError('Cannot aquire worker from stopped worker pool!');
8283
} else if (this.idleWorkersQueue.size > 0) {
8384
const workerDescription = this.idleWorkersQueue.dequeue();
8485
workerDescription.cancelIdleTimeout();
@@ -93,7 +94,7 @@ export class DynamicWorkerPool<
9394
this.updateAvailableWorkers();
9495
return worker;
9596
} else {
96-
throw new Error(`No free workers available in worker pool of max-size ${this.maxSize}`);
97+
throw new WorkerPoolError(`No free workers available in worker pool of max-size ${this.maxSize}`);
9798
}
9899
}
99100

@@ -133,7 +134,7 @@ export class DynamicWorkerPool<
133134
try {
134135
await worker.dispose();
135136
} catch (err) {
136-
this.errorSubject.next(new Error(`Error while disposing worker-pool worker: ${err.message}`));
137+
this.errorSubject.next(new WorkerPoolError(`Error while disposing worker-pool worker: ${err.message}`));
137138
}
138139
}
139140

src/workers/worker-thread-worker.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ describe('WorkerThreadWorker', () => {
290290

291291
const emittedError = await errorEmitterPromise;
292292
expect(emittedError).toMatchObject({
293-
message: 'Worker terminated gracefully. This hould not happen in a WorkerThreadWorker!'
293+
message: 'Worker terminated gracefully. This should not happen in a WorkerThreadWorker!'
294294
});
295295
});
296296

0 commit comments

Comments
 (0)