teraslice 3.3.0 → 3.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/LICENSE +202 -0
  2. package/package.json +25 -28
  3. package/dist/src/interfaces.js +0 -12
  4. package/dist/src/lib/cluster/cluster_master.js +0 -246
  5. package/dist/src/lib/cluster/node_master.js +0 -355
  6. package/dist/src/lib/cluster/services/api.js +0 -663
  7. package/dist/src/lib/cluster/services/assets.js +0 -224
  8. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/index.js +0 -192
  9. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/interfaces.js +0 -2
  10. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8s.js +0 -419
  11. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sDeploymentResource.js +0 -60
  12. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sJobResource.js +0 -55
  13. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sResource.js +0 -357
  14. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sServiceResource.js +0 -37
  15. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/k8sState.js +0 -60
  16. package/dist/src/lib/cluster/services/cluster/backends/kubernetesV2/utils.js +0 -170
  17. package/dist/src/lib/cluster/services/cluster/backends/native/dispatch.js +0 -13
  18. package/dist/src/lib/cluster/services/cluster/backends/native/index.js +0 -526
  19. package/dist/src/lib/cluster/services/cluster/backends/native/messaging.js +0 -548
  20. package/dist/src/lib/cluster/services/cluster/backends/state-utils.js +0 -26
  21. package/dist/src/lib/cluster/services/cluster/index.js +0 -13
  22. package/dist/src/lib/cluster/services/execution.js +0 -435
  23. package/dist/src/lib/cluster/services/index.js +0 -6
  24. package/dist/src/lib/cluster/services/interfaces.js +0 -2
  25. package/dist/src/lib/cluster/services/jobs.js +0 -458
  26. package/dist/src/lib/config/default-sysconfig.js +0 -25
  27. package/dist/src/lib/config/index.js +0 -20
  28. package/dist/src/lib/config/schemas/system.js +0 -360
  29. package/dist/src/lib/storage/analytics.js +0 -86
  30. package/dist/src/lib/storage/assets.js +0 -401
  31. package/dist/src/lib/storage/backends/elasticsearch_store.js +0 -496
  32. package/dist/src/lib/storage/backends/mappings/analytics.js +0 -20
  33. package/dist/src/lib/storage/backends/mappings/asset.js +0 -32
  34. package/dist/src/lib/storage/backends/mappings/ex.js +0 -53
  35. package/dist/src/lib/storage/backends/mappings/job.js +0 -42
  36. package/dist/src/lib/storage/backends/mappings/state.js +0 -16
  37. package/dist/src/lib/storage/backends/s3_store.js +0 -237
  38. package/dist/src/lib/storage/execution.js +0 -302
  39. package/dist/src/lib/storage/index.js +0 -7
  40. package/dist/src/lib/storage/jobs.js +0 -81
  41. package/dist/src/lib/storage/state.js +0 -254
  42. package/dist/src/lib/utils/api_utils.js +0 -128
  43. package/dist/src/lib/utils/asset_utils.js +0 -94
  44. package/dist/src/lib/utils/date_utils.js +0 -52
  45. package/dist/src/lib/utils/encoding_utils.js +0 -27
  46. package/dist/src/lib/utils/events.js +0 -4
  47. package/dist/src/lib/utils/file_utils.js +0 -124
  48. package/dist/src/lib/utils/id_utils.js +0 -15
  49. package/dist/src/lib/utils/port_utils.js +0 -32
  50. package/dist/src/lib/workers/assets/index.js +0 -3
  51. package/dist/src/lib/workers/assets/loader-executable.js +0 -40
  52. package/dist/src/lib/workers/assets/loader.js +0 -73
  53. package/dist/src/lib/workers/assets/spawn.js +0 -55
  54. package/dist/src/lib/workers/context/execution-context.js +0 -12
  55. package/dist/src/lib/workers/context/terafoundation-context.js +0 -8
  56. package/dist/src/lib/workers/execution-controller/execution-analytics.js +0 -188
  57. package/dist/src/lib/workers/execution-controller/index.js +0 -1024
  58. package/dist/src/lib/workers/execution-controller/recovery.js +0 -151
  59. package/dist/src/lib/workers/execution-controller/scheduler.js +0 -390
  60. package/dist/src/lib/workers/execution-controller/slice-analytics.js +0 -96
  61. package/dist/src/lib/workers/helpers/job.js +0 -80
  62. package/dist/src/lib/workers/helpers/op-analytics.js +0 -22
  63. package/dist/src/lib/workers/helpers/terafoundation.js +0 -34
  64. package/dist/src/lib/workers/helpers/worker-shutdown.js +0 -147
  65. package/dist/src/lib/workers/metrics/index.js +0 -108
  66. package/dist/src/lib/workers/worker/index.js +0 -378
  67. package/dist/src/lib/workers/worker/slice.js +0 -122
  68. package/dist/test/config/schemas/system_schema-spec.js +0 -26
  69. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/k8s-v2-spec.js +0 -458
  70. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/k8sResource-v2-spec.js +0 -818
  71. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/k8sState-multicluster-v2-spec.js +0 -67
  72. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/k8sState-v2-spec.js +0 -84
  73. package/dist/test/lib/cluster/services/cluster/backends/kubernetes/v2/utils-v2-spec.js +0 -320
  74. package/dist/test/lib/cluster/services/cluster/backends/state-utils-spec.js +0 -37
  75. package/dist/test/node_master-spec.js +0 -194
  76. package/dist/test/services/api-spec.js +0 -79
  77. package/dist/test/services/assets-spec.js +0 -158
  78. package/dist/test/services/messaging-spec.js +0 -440
  79. package/dist/test/storage/assets_storage-spec.js +0 -95
  80. package/dist/test/storage/s3_store-spec.js +0 -149
  81. package/dist/test/test.config.js +0 -23
  82. package/dist/test/test.setup.js +0 -6
  83. package/dist/test/utils/api_utils-spec.js +0 -25
  84. package/dist/test/utils/asset_utils-spec.js +0 -141
  85. package/dist/test/utils/elastic_utils-spec.js +0 -25
  86. package/dist/test/workers/execution-controller/execution-controller-spec.js +0 -371
  87. package/dist/test/workers/execution-controller/execution-special-test-cases-spec.js +0 -519
  88. package/dist/test/workers/execution-controller/execution-test-cases-spec.js +0 -343
  89. package/dist/test/workers/execution-controller/recovery-spec.js +0 -160
  90. package/dist/test/workers/execution-controller/scheduler-spec.js +0 -249
  91. package/dist/test/workers/execution-controller/slice-analytics-spec.js +0 -121
  92. package/dist/test/workers/fixtures/ops/example-op/processor.js +0 -20
  93. package/dist/test/workers/fixtures/ops/example-op/schema.js +0 -19
  94. package/dist/test/workers/fixtures/ops/example-reader/fetcher.js +0 -20
  95. package/dist/test/workers/fixtures/ops/example-reader/schema.js +0 -41
  96. package/dist/test/workers/fixtures/ops/example-reader/slicer.js +0 -37
  97. package/dist/test/workers/fixtures/ops/new-op/processor.js +0 -29
  98. package/dist/test/workers/fixtures/ops/new-op/schema.js +0 -18
  99. package/dist/test/workers/fixtures/ops/new-reader/fetcher.js +0 -19
  100. package/dist/test/workers/fixtures/ops/new-reader/schema.js +0 -23
  101. package/dist/test/workers/fixtures/ops/new-reader/slicer.js +0 -13
  102. package/dist/test/workers/helpers/configs.js +0 -128
  103. package/dist/test/workers/helpers/execution-controller-helper.js +0 -49
  104. package/dist/test/workers/helpers/index.js +0 -5
  105. package/dist/test/workers/helpers/test-context.js +0 -210
  106. package/dist/test/workers/helpers/zip-directory.js +0 -25
  107. package/dist/test/workers/worker/slice-spec.js +0 -333
  108. package/dist/test/workers/worker/worker-spec.js +0 -356
@@ -1,249 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import { v4 as uuidv4 } from 'uuid';
3
- import { pDelay, once, times } from '@terascope/core-utils';
4
- import { TestContext } from '../helpers/test-context.js';
5
- import { Scheduler } from '../../../src/lib/workers/execution-controller/scheduler.js';
6
- describe('Scheduler', () => {
7
- const slicers = 3;
8
- const countPerSlicer = 200;
9
- let expectedCount;
10
- let testContext;
11
- let scheduler;
12
- let stateStorage;
13
- let executionStorage;
14
- function getSlices() {
15
- const slices = [];
16
- return new Promise((resolve) => {
17
- const intervalId = setInterval(() => {
18
- if (scheduler.isFinished) {
19
- clearInterval(intervalId);
20
- resolve(slices);
21
- }
22
- else {
23
- const result = scheduler.getSlices(100);
24
- if (result.length > 0) {
25
- slices.push(...result);
26
- }
27
- }
28
- }, 1);
29
- });
30
- }
31
- beforeEach(async () => {
32
- expectedCount = slicers * countPerSlicer;
33
- testContext = new TestContext({
34
- assignment: 'execution_controller',
35
- slicers,
36
- newOps: true,
37
- countPerSlicer
38
- });
39
- await testContext.initialize();
40
- scheduler = new Scheduler(testContext.context, testContext.executionContext);
41
- stateStorage = {
42
- async getStartingPoints(exId, numSlicers) {
43
- if (numSlicers !== slicers) {
44
- throw new Error(`Got invalid slicer ids, ${numSlicers.join(' ')}`);
45
- }
46
- },
47
- createState: () => pDelay(0),
48
- createSlices: async (exId, slices) => {
49
- if (!exId || typeof exId !== 'string' || exId !== testContext.exId) {
50
- throw new Error(`Got invalid ex_id ${exId}`);
51
- }
52
- await pDelay(0);
53
- return slices.length;
54
- }
55
- };
56
- executionStorage = {
57
- async get() {
58
- return { slicers };
59
- },
60
- setStatus: jest.fn(() => pDelay(0)),
61
- };
62
- testContext.attachCleanup(() => scheduler.shutdown());
63
- });
64
- afterEach(() => testContext.cleanup());
65
- describe('when testing a normal execution', () => {
66
- beforeEach(() => scheduler.initialize(stateStorage, executionStorage));
67
- it('should be constructed wih the correct values', async () => {
68
- expect(scheduler.slicersDone).toBeFalse();
69
- expect(scheduler.ready).toBeFalse();
70
- expect(scheduler.paused).toBeTrue();
71
- expect(scheduler.stopped).toBeFalse();
72
- expect(scheduler.queueLength).toEqual(0);
73
- expect(scheduler.isFinished).toBeFalse();
74
- });
75
- it('should be able to reenqueue a slice', () => {
76
- scheduler.enqueueSlices([
77
- {
78
- slice_id: 1
79
- },
80
- {
81
- slice_id: 2
82
- }
83
- ]);
84
- scheduler.enqueueSlice({ slice_id: 1 });
85
- scheduler.enqueueSlice({
86
- slice_id: 3
87
- }, true);
88
- const slices = scheduler.getSlices(100);
89
- expect(slices).toEqual([
90
- {
91
- slice_id: 3
92
- },
93
- {
94
- slice_id: 1
95
- },
96
- {
97
- slice_id: 2
98
- }
99
- ]);
100
- });
101
- it(`should be able to schedule ${expectedCount} slices`, async () => {
102
- let slices = [];
103
- await Promise.all([
104
- scheduler.run(),
105
- getSlices().then((_slices) => {
106
- slices = _slices;
107
- })
108
- ]);
109
- expect(scheduler.paused).toBeFalse();
110
- expect(scheduler.slicersDone).toBeTrue();
111
- expect(scheduler.queueLength).toEqual(0);
112
- expect(slices).toHaveLength(expectedCount);
113
- expect(scheduler.isFinished).toBeTrue();
114
- });
115
- it('should handle pause and resume correctly', async () => {
116
- let slices = [];
117
- const pause = once(() => {
118
- scheduler.pause();
119
- setTimeout(() => scheduler.start(), 10);
120
- });
121
- scheduler.events.on('slicer:done', pause);
122
- await Promise.all([
123
- scheduler.run(),
124
- getSlices().then((_slices) => {
125
- slices = _slices;
126
- })
127
- ]);
128
- expect(slices).toHaveLength(expectedCount);
129
- expect(scheduler.isFinished).toBeTrue();
130
- expect(scheduler.slicersDone).toBeTrue();
131
- });
132
- it('should handle stop correctly', async () => {
133
- let slices = [];
134
- scheduler.events.once('slicer:done', () => scheduler.stop());
135
- await Promise.all([
136
- scheduler.run(),
137
- getSlices().then((_slices) => {
138
- slices = _slices;
139
- })
140
- ]);
141
- // be more flexible
142
- const min = expectedCount - slicers * 8;
143
- const max = expectedCount + slicers * 8;
144
- expect(slices.length).toBeWithin(min, max);
145
- expect(scheduler.isFinished).toBeTrue();
146
- expect(scheduler.stopped).toBeTrue();
147
- expect(scheduler.slicersDone).toBeFalse();
148
- });
149
- });
150
- describe('when testing recovery', () => {
151
- let recoveryRecords;
152
- let emitDone;
153
- let exitAfterComplete = false;
154
- beforeEach(() => {
155
- emitDone = once(() => {
156
- scheduler.events.emit('execution:recovery:complete', []);
157
- });
158
- // @ts-expect-error
159
- scheduler.recoverExecution = true;
160
- scheduler.recovering = true;
161
- // @ts-expect-error
162
- scheduler.recover = {
163
- initialize() {
164
- return Promise.resolve();
165
- },
166
- shutdown() {
167
- return Promise.resolve();
168
- },
169
- // @ts-expect-error
170
- handle() {
171
- return recoveryRecords.length === 0;
172
- },
173
- getSlices(max = 1) {
174
- const result = recoveryRecords.splice(0, max);
175
- if (!recoveryRecords.length) {
176
- emitDone();
177
- }
178
- return result;
179
- },
180
- recoveryComplete() {
181
- if (!recoveryRecords.length) {
182
- emitDone();
183
- return true;
184
- }
185
- return false;
186
- },
187
- sliceCount() {
188
- return 10;
189
- },
190
- exitAfterComplete() {
191
- return exitAfterComplete;
192
- }
193
- };
194
- return scheduler.initialize(stateStorage, executionStorage);
195
- });
196
- it('should handle recovery correctly and exit', async () => {
197
- recoveryRecords = times(countPerSlicer * slicers, () => ({
198
- slice_id: uuidv4(),
199
- slicer_id: 1,
200
- slicer_order: 0,
201
- request: {
202
- id: `recover-${Math.random()}`
203
- },
204
- _created: new Date().toISOString()
205
- }));
206
- let slices = [];
207
- expectedCount += recoveryRecords.length;
208
- await Promise.all([
209
- scheduler.run(),
210
- getSlices().then((_slices) => {
211
- slices = _slices;
212
- })
213
- ]);
214
- expect(slices).toHaveLength(expectedCount);
215
- expect(scheduler.ready).toBeTrue();
216
- expect(scheduler.isFinished).toBeTrue();
217
- expect(scheduler.stopped).toBeFalse();
218
- expect(scheduler.recovering).toBeFalse();
219
- expect(scheduler.slicersDone).toBeTrue();
220
- });
221
- it('should handle recovery with cleanup type correctly and not exit', async () => {
222
- exitAfterComplete = true;
223
- recoveryRecords = times(countPerSlicer, () => ({
224
- slice_id: uuidv4(),
225
- slicer_id: 1,
226
- slicer_order: 0,
227
- request: {
228
- id: `recover-${Math.random()}`
229
- },
230
- _created: new Date().toISOString()
231
- }));
232
- let slices = [];
233
- expectedCount = recoveryRecords.length;
234
- await Promise.all([
235
- scheduler.run(),
236
- getSlices().then((_slices) => {
237
- slices = _slices;
238
- })
239
- ]);
240
- expect(slices).toHaveLength(expectedCount);
241
- expect(scheduler.ready).toBeFalse();
242
- expect(scheduler.isFinished).toBeTrue();
243
- expect(scheduler.stopped).toBeFalse();
244
- expect(scheduler.recovering).toBeFalse();
245
- expect(scheduler.slicersDone).toBeTrue();
246
- });
247
- });
248
- });
249
- //# sourceMappingURL=scheduler-spec.js.map
@@ -1,121 +0,0 @@
1
- import events from 'node:events';
2
- import { SliceAnalytics } from '../../../src/lib/workers/execution-controller/slice-analytics.js';
3
- const eventEmitter = new events.EventEmitter();
4
- describe('slice_analytics', () => {
5
- const logMessages = [];
6
- const logger = {
7
- error() { },
8
- info(msg) {
9
- logMessages.push(msg);
10
- },
11
- warn() { },
12
- trace() { },
13
- debug() { }
14
- };
15
- const context = {
16
- apis: {
17
- foundation: {
18
- makeLogger: () => logger,
19
- getSystemEvents: () => eventEmitter
20
- }
21
- }
22
- };
23
- const executionContext = {
24
- config: {
25
- slicers: 2,
26
- operations: [{ _op: 'config1' }, { _op: 'config2' }, { _op: 'config3' }]
27
- },
28
- ex_id: '1234',
29
- job_id: '5678'
30
- };
31
- const analytics = new SliceAnalytics(context, executionContext);
32
- it('addStats transfers message stats to the statsContainer', () => {
33
- const statsObj = analytics.getStats();
34
- const data = { time: [234, 125, 1300], size: [2300, 4600], memory: [1234, 4567] };
35
- const data2 = { time: [346, 325, 1102], size: [1120, 2240], memory: [12345, 56789] };
36
- expect(statsObj.size[0]).toMatchObject({
37
- min: 0,
38
- max: 0,
39
- sum: 0,
40
- total: 0,
41
- average: 0,
42
- });
43
- expect(statsObj.time[0]).toMatchObject({
44
- min: 0,
45
- max: 0,
46
- sum: 0,
47
- total: 0,
48
- average: 0,
49
- });
50
- expect(statsObj.memory[0]).toMatchObject({
51
- min: 0,
52
- max: 0,
53
- sum: 0,
54
- total: 0,
55
- average: 0,
56
- });
57
- analytics.addStats(data);
58
- expect(statsObj.size[0]).toMatchObject({
59
- min: 2300,
60
- max: 2300,
61
- sum: 2300,
62
- total: 1,
63
- average: 2300,
64
- });
65
- expect(statsObj.time[0]).toMatchObject({
66
- min: 234,
67
- max: 234,
68
- sum: 234,
69
- total: 1,
70
- average: 234,
71
- });
72
- expect(statsObj.memory[0]).toMatchObject({
73
- min: 1234,
74
- max: 1234,
75
- sum: 1234,
76
- total: 1,
77
- average: 1234,
78
- });
79
- analytics.addStats(data2);
80
- expect(statsObj.size[0]).toMatchObject({
81
- min: 1120,
82
- max: 2300,
83
- sum: 3420,
84
- total: 2,
85
- average: 1710,
86
- });
87
- expect(statsObj.time[0]).toMatchObject({
88
- min: 234,
89
- max: 346,
90
- sum: 580,
91
- total: 2,
92
- average: 290,
93
- });
94
- expect(statsObj.memory[0]).toMatchObject({
95
- min: 1234,
96
- max: 12345,
97
- sum: 13579,
98
- total: 2,
99
- average: 6789.5,
100
- });
101
- });
102
- it('statsContainer takes in job.operations and returns an object for the number of ops', () => {
103
- const results = analytics.getStats();
104
- expect(results).toBeDefined();
105
- expect(results.time).toBeDefined();
106
- expect(results.size).toBeDefined();
107
- expect(Array.isArray(results.time)).toBe(true);
108
- expect(Array.isArray(results.size)).toBe(true);
109
- expect(results.time.length).toEqual(3);
110
- expect(results.size.length).toEqual(3);
111
- expect(results.memory.length).toEqual(3);
112
- });
113
- it('analyzeStats will log results', () => {
114
- analytics.analyzeStats();
115
- expect(logMessages.shift()).toEqual('calculating statistics');
116
- expect(logMessages.shift()).toContain('operation config1');
117
- expect(logMessages.shift()).toContain('operation config2');
118
- expect(logMessages.shift()).toContain('operation config3');
119
- });
120
- });
121
- //# sourceMappingURL=slice-analytics-spec.js.map
@@ -1,20 +0,0 @@
1
- import { BatchProcessor } from '@terascope/job-components';
2
- const defaultResults = Array.from(Array(10)).map(() => ({ hi: true }));
3
- export default class ExampleBatch extends BatchProcessor {
4
- async onBatch(_batch) {
5
- const errorAt = this.opConfig.errorAt ?? [];
6
- // @ts-expect-error
7
- if (this.context._opCalls == null) {
8
- // @ts-expect-error
9
- this.context._opCalls = -1;
10
- }
11
- // @ts-expect-error
12
- this.context._opCalls += 1;
13
- // @ts-expect-error
14
- if (errorAt.includes(this.context._opCalls)) {
15
- return Promise.reject(new Error('Bad news bears'));
16
- }
17
- return this.opConfig.results ?? defaultResults;
18
- }
19
- }
20
- //# sourceMappingURL=processor.js.map
@@ -1,19 +0,0 @@
1
- import { BaseSchema } from '@terascope/job-components';
2
- const defaultResults = Array.from(Array(10)).map(() => ({ hi: true }));
3
- export default class Schema extends BaseSchema {
4
- build() {
5
- return {
6
- errorAt: {
7
- doc: 'An array of indexes to error at',
8
- default: [],
9
- format: 'Array'
10
- },
11
- results: {
12
- doc: 'Op results to return',
13
- default: defaultResults,
14
- format: 'Array'
15
- },
16
- };
17
- }
18
- }
19
- //# sourceMappingURL=schema.js.map
@@ -1,20 +0,0 @@
1
- import { Fetcher } from '@terascope/job-components';
2
- const defaultResults = Array.from(Array(10)).map(() => ({ hi: true }));
3
- export default class ExampleBatch extends Fetcher {
4
- async fetch() {
5
- const errorAt = this.opConfig.errorAt ?? [];
6
- // @ts-expect-error
7
- if (this.context._readerCalls == null) {
8
- // @ts-expect-error
9
- this.context._readerCalls = -1;
10
- }
11
- // @ts-expect-error
12
- this.context._readerCalls += 1;
13
- // @ts-expect-error
14
- if (errorAt.includes(this.context._readerCalls)) {
15
- return Promise.reject(new Error('Bad news bears'));
16
- }
17
- return this.opConfig.results ?? defaultResults;
18
- }
19
- }
20
- //# sourceMappingURL=fetcher.js.map
@@ -1,41 +0,0 @@
1
- import { BaseSchema } from '@terascope/job-components';
2
- const defaultResults = Array.from(Array(10)).map(() => ({ hi: true }));
3
- const defaultSlicerResults = [{ howdy: true }, null];
4
- const defaultSlicerQueueLength = '10';
5
- export default class Schema extends BaseSchema {
6
- build() {
7
- return {
8
- errorAt: {
9
- doc: 'An array of indexes to error at',
10
- default: [],
11
- format: 'Array'
12
- },
13
- results: {
14
- doc: 'Reader results to return',
15
- default: defaultResults,
16
- format: 'Array'
17
- },
18
- slicerQueueLength: {
19
- doc: 'A string for the slicer queue length, anything but QUEUE_MINIMUM_SIZE will be converted to a number',
20
- default: defaultSlicerQueueLength,
21
- format: 'String'
22
- },
23
- slicerErrorAt: {
24
- doc: 'An array of indexes to error at when newSlicer is invoked',
25
- default: [],
26
- format: 'Array'
27
- },
28
- slicerResults: {
29
- doc: 'Slicer results to return',
30
- default: defaultSlicerResults,
31
- format: 'Array'
32
- },
33
- updateMetadata: {
34
- doc: 'Update the metadata on the slicer execution',
35
- default: false,
36
- format: Boolean
37
- }
38
- };
39
- }
40
- }
41
- //# sourceMappingURL=schema.js.map
@@ -1,37 +0,0 @@
1
- import { ParallelSlicer } from '@terascope/job-components';
2
- import { get } from '@terascope/core-utils';
3
- const defaultSlicerResults = [{ howdy: true }, null];
4
- export default class ExampleSlicer extends ParallelSlicer {
5
- async newSlicer(_id) {
6
- const slicerResults = get(this.opConfig, 'slicerResults', defaultSlicerResults);
7
- const errorAt = get(this.opConfig, 'slicerErrorAt', []);
8
- const updateMetadata = get(this.opConfig, 'updateMetadata', false);
9
- // @ts-expect-error
10
- if (!this.context._slicerCalls) {
11
- // @ts-expect-error
12
- this.context._slicerCalls = -1;
13
- }
14
- let sliceCalls = 0;
15
- return async () => {
16
- // @ts-expect-error
17
- this.context._slicerCalls += 1;
18
- // @ts-expect-error
19
- if (errorAt.includes(this.context._slicerCalls)) {
20
- return Promise.reject(new Error('Bad news bears'));
21
- }
22
- const result = slicerResults.shift();
23
- sliceCalls++;
24
- if (updateMetadata) {
25
- await this.context.apis.executionContext.setMetadata('slice_calls', sliceCalls);
26
- }
27
- if (result && result.error) {
28
- throw new Error(result.error);
29
- }
30
- return result;
31
- };
32
- }
33
- isRecoverable() {
34
- return true;
35
- }
36
- }
37
- //# sourceMappingURL=slicer.js.map
@@ -1,29 +0,0 @@
1
- import { BatchProcessor } from '@terascope/job-components';
2
- export default class ExampleBatch extends BatchProcessor {
3
- initialized;
4
- shutdownCalled;
5
- async initialize() {
6
- this.initialized = true;
7
- this.logger.debug('example map initalized', this.opConfig);
8
- return super.initialize();
9
- }
10
- async shutdown() {
11
- this.shutdownCalled = true;
12
- return super.shutdown();
13
- }
14
- async onBatch(batch) {
15
- if (this.opConfig.failOnSliceRetry) {
16
- throw new Error('Fail slices');
17
- }
18
- return batch.map((data) => {
19
- data.touchedAt = new Date().toISOString();
20
- return data;
21
- });
22
- }
23
- onSliceRetry() {
24
- if (this.opConfig.failOnSliceRetry) {
25
- throw new Error('I will not allow it');
26
- }
27
- }
28
- }
29
- //# sourceMappingURL=processor.js.map
@@ -1,18 +0,0 @@
1
- import { BaseSchema } from '@terascope/job-components';
2
- export default class Schema extends BaseSchema {
3
- build() {
4
- return {
5
- example: {
6
- default: 'examples are quick and easy',
7
- doc: 'A random example schema property',
8
- format: 'String',
9
- },
10
- failOnSliceRetry: {
11
- default: false,
12
- doc: 'fail on slice retry',
13
- format: Boolean,
14
- }
15
- };
16
- }
17
- }
18
- //# sourceMappingURL=schema.js.map
@@ -1,19 +0,0 @@
1
- import { Fetcher } from '@terascope/job-components';
2
- export default class ExampleFetcher extends Fetcher {
3
- async fetch() {
4
- const { countPerFetch } = this.opConfig;
5
- const result = [];
6
- for (let i = 0; i < countPerFetch; i++) {
7
- result.push({
8
- id: i,
9
- data: [
10
- Math.random(),
11
- Math.random(),
12
- Math.random(),
13
- ]
14
- });
15
- }
16
- return result;
17
- }
18
- }
19
- //# sourceMappingURL=fetcher.js.map
@@ -1,23 +0,0 @@
1
- import { BaseSchema } from '@terascope/job-components';
2
- export default class Schema extends BaseSchema {
3
- build() {
4
- return {
5
- example: {
6
- default: 'examples are quick and easy',
7
- doc: 'A random example schema property',
8
- format: 'String',
9
- },
10
- countPerSlicer: {
11
- default: 10,
12
- doc: 'The number of slices for the slicer to create',
13
- format: 'Number',
14
- },
15
- countPerFetch: {
16
- default: 10,
17
- doc: 'The number of records to return from the fetcher',
18
- format: 'Number',
19
- }
20
- };
21
- }
22
- }
23
- //# sourceMappingURL=schema.js.map
@@ -1,13 +0,0 @@
1
- import { ParallelSlicer } from '@terascope/job-components';
2
- import { pDelay, times } from '@terascope/core-utils';
3
- export default class ExampleSlicer extends ParallelSlicer {
4
- async newSlicer(id) {
5
- const { countPerSlicer } = this.opConfig;
6
- const records = times(countPerSlicer, (i) => ({ id: `slicer-${id}-${i}` }));
7
- return async () => {
8
- await pDelay(0);
9
- return records.shift();
10
- };
11
- }
12
- }
13
- //# sourceMappingURL=slicer.js.map