UNPKG

6.1 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const utils_1 = require("@terascope/utils");
7const slicer_core_1 = __importDefault(require("./core/slicer-core"));
8/**
9 * A varient of a "Slicer" for running a parallel stream of slicers.
10 * @see SlicerCore
11 */
12class ParallelSlicer extends slicer_core_1.default {
13 constructor() {
14 super(...arguments);
15 this._slicers = [];
16 }
17 /**
18 * Register the different Slicer instances
19 * @see SlicerCore#initialize
20 */
21 async initialize(recoveryData) {
22 await super.initialize(recoveryData);
23 const { slicers = 1 } = this.executionConfig;
24 const promises = utils_1.times(slicers, async (id) => {
25 const fn = await this.newSlicer();
26 if (!utils_1.isFunction(fn))
27 return;
28 this._slicers.push({
29 done: false,
30 fn,
31 id,
32 processing: false,
33 order: 0,
34 });
35 });
36 await Promise.all(promises);
37 }
38 /**
39 * Cleanup the slicers functions
40 * @see SlicerCore#shutdown
41 */
42 async shutdown() {
43 this._slicers.length = 0;
44 return super.shutdown();
45 }
46 slicers() {
47 return this._slicers.length;
48 }
49 async handle() {
50 if (this.isFinished)
51 return true;
52 const promises = this._slicers
53 .filter((slicer) => !slicer.processing)
54 .map((slicer) => this.processSlicer(slicer));
55 await Promise.race(promises);
56 return this.isFinished;
57 }
58 get isFinished() {
59 return this._slicers.every((slicer) => slicer.done);
60 }
61 async processSlicer(slicer) {
62 if (slicer.done || slicer.processing)
63 return;
64 slicer.processing = true;
65 let result;
66 try {
67 result = await slicer.fn();
68 }
69 finally {
70 slicer.processing = false;
71 }
72 if (result == null && this.canComplete()) {
73 this.logger.info(`slicer ${slicer.id} has completed its range`);
74 slicer.done = true;
75 this.events.emit('slicer:done', slicer.id);
76 }
77 else if (result != null) {
78 if (Array.isArray(result)) {
79 this.events.emit('slicer:subslice');
80 result.forEach((item) => {
81 slicer.order += 1;
82 this.createSlice(item, slicer.order, slicer.id);
83 });
84 }
85 else {
86 slicer.order += 1;
87 this.createSlice(result, slicer.order, slicer.id);
88 }
89 }
90 }
91}
92exports.default = ParallelSlicer;
93//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwtc2xpY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvcGFyYWxsZWwtc2xpY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNENBQXFEO0FBRXJELHFFQUE0QztBQUU1Qzs7O0dBR0c7QUFFSCxNQUE4QixjQUE2QixTQUFRLHFCQUFhO0lBQWhGOztRQUNjLGFBQVEsR0FBZ0IsRUFBRSxDQUFDO0lBMEZ6QyxDQUFDO0lBeEZHOzs7TUFHRTtJQUNGLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBc0I7UUFDbkMsTUFBTSxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUU3QyxNQUFNLFFBQVEsR0FBRyxhQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUN6QyxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsa0JBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQUUsT0FBTztZQUU1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDZixJQUFJLEVBQUUsS0FBSztnQkFDWCxFQUFFO2dCQUNGLEVBQUU7Z0JBQ0YsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLEtBQUssRUFBRSxDQUFDO2FBQ1gsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7TUFHRTtJQUNGLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENB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
\No newline at end of file