1 | ;
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const utils_1 = require("@terascope/utils");
|
7 | const 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 | */
|
12 | class 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 | }
|
92 | exports.default = ParallelSlicer;
|
93 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwtc2xpY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvcGFyYWxsZWwtc2xpY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNENBQXFEO0FBRXJELHFFQUE0QztBQUU1Qzs7O0dBR0c7QUFFSCxNQUE4QixjQUE2QixTQUFRLHFCQUFhO0lBQWhGOztRQUNjLGFBQVEsR0FBZ0IsRUFBRSxDQUFDO0lBMEZ6QyxDQUFDO0lBeEZHOzs7TUFHRTtJQUNGLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBc0I7UUFDbkMsTUFBTSxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUU3QyxNQUFNLFFBQVEsR0FBRyxhQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUN6QyxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsa0JBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQUUsT0FBTztZQUU1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDZixJQUFJLEVBQUUsS0FBSztnQkFDWCxFQUFFO2dCQUNGLEVBQUU7Z0JBQ0YsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLEtBQUssRUFBRSxDQUFDO2FBQ1gsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7TUFHRTtJQUNGLEtBQUssQ0FBQyxRQUFRO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENB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 |
\ | No newline at end of file |