Skip to content

Release v1.6.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 20:05
ce8685a

Fixed

  • SQL jobs storage now creates its own schema. The provider shipped a JobsDbContext with 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 with relation "Jobs" does not exist. A v1_0_0 migration creates Jobs and JobSteps, and SqlJobsStorage.GetFor applies it before handing back storage. The column helpers come from Cratis.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 called Provide(), 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. IgnoreExtraElementsConvention added 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 mocked DbContext never 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.