diff --git a/changelog.d/unreleased/2949.fixed.md b/changelog.d/unreleased/2949.fixed.md new file mode 100644 index 0000000000..4845a74c66 --- /dev/null +++ b/changelog.d/unreleased/2949.fixed.md @@ -0,0 +1,16 @@ +--- +category: fixed +issues: + - 2949 +affected: + - src/CodeIndex/Indexer/BoundedRegex.cs + - tests/CodeIndex.Tests/BoundedRegexTests.cs +--- + +## English + +- **SQL reference extraction is less likely to drop matches under full-suite CPU contention (#2949)** - bounded regex matching now keeps a larger but still finite default timeout, reducing intermittent missed SQL references during heavily loaded test and indexing runs. + +## 日本語 + +- **full-suite の CPU 競合下で SQL reference 抽出が match を落としにくくなりました (#2949)** - bounded regex matching の既定 timeout を、有限のまま余裕を持たせた値に変更し、高負荷なテスト実行や index 実行中に SQL reference が断続的に欠ける問題を減らしました。 diff --git a/src/CodeIndex/Indexer/BoundedRegex.cs b/src/CodeIndex/Indexer/BoundedRegex.cs index daec250045..325cc7a37f 100644 --- a/src/CodeIndex/Indexer/BoundedRegex.cs +++ b/src/CodeIndex/Indexer/BoundedRegex.cs @@ -6,7 +6,8 @@ namespace CodeIndex.Indexer; internal sealed class BoundedRegex : BclRegex { - internal static readonly TimeSpan DefaultMatchTimeout = TimeSpan.FromMilliseconds(250); + // Keep regex matches bounded, but leave enough scheduler headroom for full-suite CI contention. + internal static readonly TimeSpan DefaultMatchTimeout = TimeSpan.FromSeconds(1); public BoundedRegex(string pattern) : base(pattern, RegexOptions.None, DefaultMatchTimeout) diff --git a/tests/CodeIndex.Tests/BoundedRegexTests.cs b/tests/CodeIndex.Tests/BoundedRegexTests.cs new file mode 100644 index 0000000000..6b1ed8026d --- /dev/null +++ b/tests/CodeIndex.Tests/BoundedRegexTests.cs @@ -0,0 +1,15 @@ +using CodeIndex.Indexer; + +namespace CodeIndex.Tests; + +public sealed class BoundedRegexTests +{ + [Fact] + public void DefaultMatchTimeout_KeepsBoundedMatchesFromTimingOutUnderNormalSchedulerContention() + { + Assert.InRange( + BoundedRegex.DefaultMatchTimeout, + TimeSpan.FromSeconds(1), + TimeSpan.FromSeconds(5)); + } +}