in lib/Helpers.js [702:751]
function tryBulk (bulkBody, callback) {
if (shouldAbort === true) return callback(null, [])
client.bulk(Object.assign({}, bulkOptions, { body: bulkBody }), reqOptions, (err, { body }) => {
if (err) return callback(err, null)
if (body.errors === false) {
stats.successful += body.items.length
for (const item of body.items) {
if (item.update && item.update.result === 'noop') {
stats.noop++
}
}
return callback(null, [])
}
const retry = []
const { items } = body
for (let i = 0, len = items.length; i < len; i++) {
const action = items[i]
const operation = Object.keys(action)[0]
const { status } = action[operation]
const indexSlice = operation !== 'delete' ? i * 2 : i
if (status >= 400) {
// 429 is the only staus code where we might want to retry
// a document, because it was not an error in the document itself,
// but the OpenSearch node were handling too many operations.
if (status === 429) {
retry.push(bulkBody[indexSlice])
/* istanbul ignore next */
if (operation !== 'delete') {
retry.push(bulkBody[indexSlice + 1])
}
} else {
onDrop({
status: status,
error: action[operation].error,
operation: serializer.deserialize(bulkBody[indexSlice]),
document: operation !== 'delete'
? serializer.deserialize(bulkBody[indexSlice + 1])
: null,
retried: isRetrying
})
stats.failed += 1
}
} else {
stats.successful += 1
}
}
callback(null, retry)
})
}