tim-kos/node-retry

Check for infinity value in `retries`

fzn0x opened this issue · 2 comments

fzn0x commented

You can found the details at #58 too.

When we give retries Infinity value, it will produce this error

#
# Fatal error in , line 0
# Fatal JavaScript invalid size error 169220804
#
#
#
#FailureMessage Object: 0000007FAFAFD6C0
 1: 00007FF6B5CC30AF v8::internal::CodeObjectRegistry::~CodeObjectRegistry+112511
 2: 00007FF6B5BE023F v8::CFunctionInfo::HasOptions+7055
 3: 00007FF6B68B6392 V8_Fatal+162
 4: 00007FF6B6440153 v8::internal::FactoryBase<v8::internal::Factory>::NewFixedDoubleArray+259
 5: 00007FF6B62E8B73 v8::internal::FeedbackNexus::ic_state+60339
 6: 00007FF6B62FFBD0 v8::Message::GetIsolate+14688
 7: 00007FF6B6174711 v8::internal::CompilationCache::IsEnabledScriptAndEval+26849
 8: 00007FF6B6612541 v8::internal::SetupIsolateDelegate::SetupHeap+494417
 9: 000001FE08B399D9

Work around:

  await pRetry(run, {
    retries: Infinity,
    onFailedAttempt: () => {
      console.log("Retrying..");
    },
  });
"p-retry": "^5.0.0"

The solution

  • Allow infinity retries, or
  • Throw error for infinity value

It appears that the option 'forever': true would be more appropriate, however it does not work either.

I vote in favour retries: Infinity and some code seems to count with that:

forever: options && (options.forever || options.retries === Infinity),

but other code doesn't

for (var i = 0; i < opts.retries; i++) {