Skip to content

Wolverine.Polecat IntegrateWithWolverine defaults durability to master/wolverine instead of inheriting the Polecat DatabaseSchemaName (Marten does) #3175

Closed

Description

@jeremydmiller

Summary

Wolverine.Marten's IntegrateWithWolverine() puts the message-durability tables (envelopes, dead letters, nodes/assignments, …) in the Marten store's DatabaseSchemaName by default — so two Marten-backed services with distinct document schemas are automatically isolated.

Wolverine.Polecat's IntegrateWithWolverine() does not mirror this: with no explicit MessageStorageSchemaName it defaults durability to SQL Server master / the wolverine schema, ignoring the Polecat DatabaseSchemaName. So multiple Polecat services with distinct document schemas still share the same durability tables (including wolverine_dead_letters) unless each one explicitly sets MessageStorageSchemaName.

Why it's a footgun

Sharing a durability schema silently couples services: shared node/assignment/agent-restriction state (the leader-election / agent-distribution bleed) and shared dead letters. We hit the dead-letter version of this in CritterWatch: two Polecat sample services (distinct document schemas polecat_trips / polecat_repair_shop) both reported database=wolverinedb://sqlserver/localhost/master/wolverine with an identical dead-letter count, because each one's SummarizeAllAsync read the same shared table.

Repro (shape)

// Two services, distinct Polecat document schemas, both IntegrateWithWolverine() with no
// MessageStorageSchemaName → both land in master/wolverine and share durability.
services.AddPolecat(m => { m.ConnectionString = cs; m.DatabaseSchemaName = "polecat_trips"; })
    .IntegrateWithWolverine();
// vs Wolverine.Marten, where the same shape isolates into the "polecat_trips" schema.

Ask

Align Wolverine.Polecat with Wolverine.Marten: default MessageStorageSchemaName (and TransportSchemaName) to the Polecat DatabaseSchemaName when not explicitly set, so distinct-schema Polecat services are isolated by default. (Workaround today: set o.MessageStorageSchemaName / o.TransportSchemaName explicitly per service.)

Found via CritterWatch #504.

Activity

  1. added a commit that references this issue on Jun 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions