Skip to content

JasperFx 2.89.0

Choose a tag to compare

@jeremydmiller jeremydmiller released this 15 Oct 02:15

What's new

  • ShardFailure.IsTransient: whether a shard's failure is expected to clear on its own. (#1016, for JasperFx/wolverine#4986)
    • ShardFailure.For sets it from the exception graph, through the new TransientFailures.IsTransient(Exception). The failure is transient when anything in the inner exceptions or an AggregateException is one of these:
      • a DbException that reports IsTransient;
      • a TimeoutException;
      • a SocketException;
      • an IOException that isn't a file system one.
    • Supervisors can use it to restart a paused shard only when waiting will help. That covers a pool exhausted during a large rebuild, but not a missing column. ShardFailureCategory.Other alone can't tell those two apart.
    • It's a flag next to Category, not a new category, so nothing that switches on the category changes. A failure serialized before this release reads back as false.
    • TransientFailures.AddClassifier(Func<Exception, bool?>) is for a driver whose own IsTransient is weak. Probes against each store's pinned driver:
      • Npgsql 9.0.4 classifies correctly. Pool exhausted, timeouts and 57P01 are transient; 42703 is not.
      • Microsoft.Data.SqlClient 7.0.0 and Microsoft.Data.Sqlite 10.0.9 don't override IsTransient at all. Polecat and Fisher should each add a classifier.
    • Label only. It doesn't change the daemon's retry decisions, and it isn't persisted to the extended progression row.