Repository navigation
Release v1.6.0
Fixed
- SQL jobs storage now creates its own schema. The provider shipped a
JobsDbContextwith no migrations, and nothing else in the package created the tables, so provisioning silently fell to whoever consumed it - and a consumer that did not know to do it got a database where every job read and write failed withrelation "Jobs" does not exist. Av1_0_0migration createsJobsandJobSteps, andSqlJobsStorage.GetForapplies it before handing back storage. The column helpers come fromCratis.Arc.EntityFrameworkCore, so one migration is valid across SQL Server, PostgreSQL and SQLite. - MongoDB jobs storage now registers its own convention pack. It declared one by implementing
ICanProvideMongoDBConventionPacks, but nothing ever calledProvide(), so state serialized with Pascal-case element names while every filter was written against camel case - including the composite_id. No filter matched: reads returned empty and upserts were rejected for altering an immutable_id. A failed job step was written and then could not be found, which is indistinguishable from a job that never had steps. - Job and job step state are read back as their base types, but what is written is the consumer's own subclass. The first extra property made the read throw, so a job authored the way the documentation shows could never have its steps read.
IgnoreExtraElementsConventionadded to the same pack.
Added
Orleans.Storage.Sql.Specs. There was no specs project for the SQL provider at all, which is why a provider that could not create its own schema looked healthy. The specs run against a real SQLite database rather than substitutes - a mockedDbContextnever touches a schema, so it cannot see this class of defect.- An end-to-end integration spec for a job with a genuinely failing step, against a real silo and a real MongoDB, asserting the failed step stays readable.
Notes
Both fixes are verified by mutation rather than by passing alone: removing the SQL schema call fails exactly the four schema assertions and leaves the seven behaviour specs green; removing the convention registration fails two of the five integration specs, and removing IgnoreExtraElements fails four.
The integration specs now share one silo on an ephemeral port and run in a single xUnit collection. A fixed port meant a second spec class could not start one, and the classes each reset the database they all share, so in parallel they wiped each other mid-flight.