@naturalcycles/datastore-lib 4.15.0 → 4.15.1
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.
package/dist/datastore.db.js
CHANGED
|
@@ -225,7 +225,7 @@ export class DatastoreDB extends BaseCommonDB {
|
|
|
225
225
|
(opt.experimentalCursorStream
|
|
226
226
|
? new DatastoreStreamReadable(q, opt)
|
|
227
227
|
: ds.runQueryStream(q, this.getRunQueryOptions(opt)))
|
|
228
|
-
.on('error', err => transform.
|
|
228
|
+
.on('error', err => transform.destroy(err))
|
|
229
229
|
.pipe(transform);
|
|
230
230
|
});
|
|
231
231
|
return transform;
|
|
@@ -91,7 +91,7 @@ export class DatastoreStreamReadable extends Readable {
|
|
|
91
91
|
}
|
|
92
92
|
void this.runNextQuery().catch(err => {
|
|
93
93
|
this.logger.error('error in runNextQuery', err);
|
|
94
|
-
this.
|
|
94
|
+
this.destroy(err);
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
97
|
async runNextQuery() {
|
|
@@ -162,6 +162,7 @@ export class DatastoreStreamReadable extends Readable {
|
|
|
162
162
|
return await q.run(this.dsOpt);
|
|
163
163
|
}, {
|
|
164
164
|
name: `DatastoreStreamReadable.query(${table})`,
|
|
165
|
+
predicate: err => RETRY_ON.some(s => err?.message?.toLowerCase()?.includes(s)),
|
|
165
166
|
maxAttempts: 5,
|
|
166
167
|
delay: 5000,
|
|
167
168
|
delayMultiplier: 2,
|
|
@@ -174,9 +175,21 @@ export class DatastoreStreamReadable extends Readable {
|
|
|
174
175
|
table,
|
|
175
176
|
rowsRetrieved: this.rowsRetrieved,
|
|
176
177
|
}, err);
|
|
177
|
-
this.emit('error', err);
|
|
178
178
|
clearInterval(this.maxWaitInterval);
|
|
179
|
+
this.destroy(err);
|
|
179
180
|
return;
|
|
180
181
|
}
|
|
181
182
|
}
|
|
182
183
|
}
|
|
184
|
+
// Examples of errors:
|
|
185
|
+
// UNKNOWN: Stream removed
|
|
186
|
+
const RETRY_ON = [
|
|
187
|
+
'GOAWAY',
|
|
188
|
+
'UNAVAILABLE',
|
|
189
|
+
'UNKNOWN',
|
|
190
|
+
'DEADLINE_EXCEEDED',
|
|
191
|
+
'ABORTED',
|
|
192
|
+
'much contention',
|
|
193
|
+
'try again',
|
|
194
|
+
'timeout',
|
|
195
|
+
].map(s => s.toLowerCase());
|
package/package.json
CHANGED
package/src/datastore.db.ts
CHANGED
|
@@ -352,7 +352,7 @@ export class DatastoreDB extends BaseCommonDB implements CommonDB {
|
|
|
352
352
|
? new DatastoreStreamReadable<ROW>(q, opt)
|
|
353
353
|
: (ds.runQueryStream(q, this.getRunQueryOptions(opt)) as ReadableTyped<ROW>)
|
|
354
354
|
)
|
|
355
|
-
.on('error', err => transform.
|
|
355
|
+
.on('error', err => transform.destroy(err))
|
|
356
356
|
.pipe(transform)
|
|
357
357
|
})
|
|
358
358
|
|
|
@@ -125,7 +125,7 @@ export class DatastoreStreamReadable<T = any> extends Readable implements Readab
|
|
|
125
125
|
|
|
126
126
|
void this.runNextQuery().catch(err => {
|
|
127
127
|
this.logger.error('error in runNextQuery', err)
|
|
128
|
-
this.
|
|
128
|
+
this.destroy(err)
|
|
129
129
|
})
|
|
130
130
|
}
|
|
131
131
|
|
|
@@ -217,6 +217,7 @@ export class DatastoreStreamReadable<T = any> extends Readable implements Readab
|
|
|
217
217
|
},
|
|
218
218
|
{
|
|
219
219
|
name: `DatastoreStreamReadable.query(${table})`,
|
|
220
|
+
predicate: err => RETRY_ON.some(s => err?.message?.toLowerCase()?.includes(s)),
|
|
220
221
|
maxAttempts: 5,
|
|
221
222
|
delay: 5000,
|
|
222
223
|
delayMultiplier: 2,
|
|
@@ -233,9 +234,22 @@ export class DatastoreStreamReadable<T = any> extends Readable implements Readab
|
|
|
233
234
|
},
|
|
234
235
|
err,
|
|
235
236
|
)
|
|
236
|
-
this.emit('error', err)
|
|
237
237
|
clearInterval(this.maxWaitInterval)
|
|
238
|
+
this.destroy(err as Error)
|
|
238
239
|
return
|
|
239
240
|
}
|
|
240
241
|
}
|
|
241
242
|
}
|
|
243
|
+
|
|
244
|
+
// Examples of errors:
|
|
245
|
+
// UNKNOWN: Stream removed
|
|
246
|
+
const RETRY_ON = [
|
|
247
|
+
'GOAWAY',
|
|
248
|
+
'UNAVAILABLE',
|
|
249
|
+
'UNKNOWN',
|
|
250
|
+
'DEADLINE_EXCEEDED',
|
|
251
|
+
'ABORTED',
|
|
252
|
+
'much contention',
|
|
253
|
+
'try again',
|
|
254
|
+
'timeout',
|
|
255
|
+
].map(s => s.toLowerCase())
|