f21f2e551d
Several setups migrating one SQLite secret store at once (mxaccessgw's parallel test hosts on the per-process store) failed intermittently on Windows with "cannot start a transaction within a transaction" from SqliteSecretsStoreMigrator.MigrateAsync. That message means the BEGIN ran on a handle that was already in a transaction: the pinned Microsoft.Data.Sqlite 10.0.7 can hand one pooled handle to two owners (dotnet/efcore#39009, fixed in 10.0.13) and no 10.0.x refuses to re-pool a handle whose rollback failed (dotnet/efcore#39082). The migrator now serialises migrations of one store per process behind a gate keyed on the normalised path, runs each attempt on a dedicated unpooled connection inside BEGIN IMMEDIATE, and retries SQLITE_BUSY/SQLITE_LOCKED (another process past the busy timeout) with equal-jitter exponential backoff. Store operations and the Microsoft.Data.Sqlite pin are unchanged. Tests: concurrent-init (16 hosts x 20 rounds on fresh and existing stores, two path spellings, 16 AddZbSecrets containers running the pre-host migrator + hosted service), gate sharing/waiting, BUSY retry past the 5 s busy timeout, transient-code classification. Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV
19 lines
641 B
XML
19 lines
641 B
XML
<Project>
|
|
|
|
<PropertyGroup>
|
|
<TargetFramework>net10.0</TargetFramework>
|
|
<Nullable>enable</Nullable>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<LangVersion>latest</LangVersion>
|
|
<Version>0.6.4</Version>
|
|
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
|
<PackageReadmeFile>README.md</PackageReadmeFile>
|
|
</PropertyGroup>
|
|
|
|
<!-- Embed the repo README in each packable nupkg (ignored by non-packable projects). -->
|
|
<ItemGroup Condition="'$(IsPackable)' == 'true'">
|
|
<None Include="$(MSBuildThisFileDirectory)README.md" Pack="true" PackagePath="\" Visible="false" />
|
|
</ItemGroup>
|
|
|
|
</Project>
|