Unexplained Postgres connector-open timeouts on a memex portal pod — discriminate a pod stall from a store outage; the create path answered correctly
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 35/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- csharp, postgresql
調査の方向性
Start by reading the linked StoreUnreachableIsNotARefusal and ErrorPropagationAndWedges architecture docs, then inspect retained logs for the affected pod around the incident window and compare health-check telemetry from other memex pods. Check for adjacent platform-stall, thread-pool-delay, and GC lines to distinguish a pod stall from a store or network blip; confirm the top frame in PostgreSqlStorageAdapter.WriteAsyncCore without adding retries there. Done means the evidence supports or rules out a cause and is documented; the issue does not identify a confirmed cause or a code change.
索引モデルが issue の本文から書いたものです。
説明
What is failing
For roughly two minutes around this incident's window, one memex portal pod could not reach its Postgres store, and three independent fingerprints record the same event: this CreateNode (a Hosting/PlatformBuilds/_Inbox node) was answered Unavailable after a new pooled connector open timed out (~21 s, long past the 250/500/1000 ms retry ladder); the Postgres health check on the same pod reported Unhealthy with connect timeouts (incident Admin/_LogIncident/d19bccbdb548d19a); and the path:Hosting/PlatformBuilds query fan-in stalled on the same pod (incident Admin/_LogIncident/b1942b90104d63ed, filed as #6125). The create handler itself is not the defect — MeshExtensions.HandleCreateNodeRequest's terminal arm classified the fault exactly as designed (StoreReachability.IsStoreUnreachable → NodeCreationRejectionReason.Unavailable, the 2026-09-02 change behind #3050/#3051), so nothing was written and a retry with the same node id is meaningful. The open question is why the store was unreachable, which this evidence cannot establish on its own.
Probable cause
Low confidence; two live hypotheses. The stack fails in Npgsql.PoolingDataSource.OpenNewConnector → NpgsqlConnector.ConnectAsync — a TCP-level connect timeout while opening a new connector, which is neither pool-admission starvation (the #6125 pedestrian-walk defect waits on RentAsync; it does not time out opens) nor a query stall. Per An Unreachable Store Is Not a Refusal (§ "Unreachable does not mean the store was down"), the identical exception is produced when the calling process stalls, because the connect timeout is wall-clock and does not pause for GC; in the #3050/#3051 precedent, ~89 % of the pod's Npgsql timeouts fell within 100 ms of a .NET Runtime Platform stalled line, on a pod near its managed-heap limit. The alternative is a genuine store/network blip. Discriminators: (a) the affected pod's own Platform stalled / Thread Pool is exhibiting delays lines in the window, using the doc's adjacency method; (b) whether other pods' health checks stayed green — the health-check failures recorded so far are all from this same pod, which leans pod-local, but is not proof.
Impact
Judged from the numbers: a single occurrence on a single pod — one create attempt refused with a retryable Unavailable, nothing written, no duplicate risk (the classification fix is doing its job). The same window also produced the #6125 fan-in stall and an Unhealthy pod, so if the cause is the pod stalling it will recur and take the portal's writes and reads with it; that systemic risk is what the severity is for, not this one log line.
Where to look
- The affected pod's retained logs for the incident window:
.NET Runtime Platform stalled for/Thread Pool is exhibiting delays/ GC lines, and Npgsql-timeout adjacency per the doc's method. - Health-check telemetry from the other memex pods over the same minutes — the cheap store-vs-pod discriminator.
MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(top frame) — confirm only; do not add retry at this layer (policy: retry once, then answer — see Error Propagation & Wedges).- Siblings in the same window: #6125 (fan-in stall, same pod),
Admin/_LogIncident/d19bccbdb548d19a(health check Unhealthy, same pod, triaged separately), and #5315 (open provider-stall investigation). Not a duplicate of #3050/#3051 — that defect (a create answering the wrong thing) is fixed, and is precisely why this log reads the way it does.
Evidence
| Fingerprint | c7d0c1f63a74376e |
| Category | MeshWeaver.Mesh.CreateNode |
| Severity | Error |
| Exception | NpgsqlException |
| Top frame | MeshWeaver.Hosting.PostgreSql.PostgreSqlStorageAdapter.WriteAsyncCore(MeshNode node, JsonSerializerOptions options, CancellationToken ct, Nullable1 expectedVersion)` |
| Namespace | memex |
| Pods | memex-portal-deployment-6485bffdff-cgd5r |
| Occurrences | 1 |
| First seen | 2026-10-05 08:44:45Z |
| Last seen | 2026-10-05 08:44:45Z |
| Routing | not determined — no configured route matches the category MeshWeaver.Mesh.CreateNode. This repository is the configured fallback, not a finding about who owns the fault; the category names the LOGGER, which may not be the subject. |
Recent log lines
2026-10-05 08:44:45Z memex-portal-deployment-6485bffdff-cgd5r fail: MeshWeaver.Mesh.CreateNode[0]
[CreateNode] STORE UNREACHABLE at Hosting/PlatformBuilds/_Inbox/3df7fd6432fe4ee2b15c5ac5a7833aca: NpgsqlException: The operation has timed out — the create was NOT attempted and nothing was written. The fault is the data store, not this create; the caller is answered Unavailable, so a retry with the same node id is meaningful.
Npgsql.NpgsqlException (0x80004005): The operation has timed out
---> System.TimeoutException: The operation has timed out.
at Npgsql.ThrowHelper.ThrowNpgsqlExceptionWithInnerTimeoutException(String message)
at Npgsql.Util.NpgsqlTimeout.Check()
at Npgsql.Util.NpgsqlTimeout.CheckAndGetTimeLeft()
at Npgsql.Internal.NpgsqlConnector.ConnectAsync(NpgsqlTimeout timeout, CancellationToken cancellationToken)
at Npgsql.Internal.NpgsqlConnector.RawOpen(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.Internal.NpgsqlConnector.<Open>g__OpenCore|209_0(NpgsqlConnector conn, String username, SslMode sslMode, GssEncryptionMode gssEncMode, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.Internal.NpgsqlConnector.Open(NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.PoolingDataSource.OpenNewConnector(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.PoolingDataSource.<Get>g__RentAsync|33_0(NpgsqlConnection conn, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken)
at Npgsql.NpgsqlConnection.<Open>g__OpenAsync|42_0(Boolean async, CancellationToken cancellationToken)
at Npgsql.NpgsqlDataSourceCommand.ExecuteReader(Boolean async, CommandBehavior behavior, CancellationToken cancellationToken)
at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken)
at MeshWeaver.Hosting.Postgre…[truncated]
Opened automatically from Admin/_LogIncident/c7d0c1f63a74376e. Recurrences are folded into this issue rather than opening new ones.
It also stands for the whole log site 363fa716df7bbe02: other fingerprints of this site fold in here as comments rather than opening tickets of their own.
- 主要言語
- C#
- スター
- 12
- フォーク
- 5
- 平均マージ
- 5時間 10分
- マージ済み PR(30日)
- 981
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
Systemorph/MeshWeaver のほかの issue
-
bug sev:M
難易度 4/5 3〜5日 初心者へのやさしさ 18/100
Systemorph/MeshWeaver#7902 ·
メンテナーはふだん 1 日以内に返信
-
Error in Pollyオープンbug sev:L
難易度 5/5 1週間以上 初心者へのやさしさ 15/100
Systemorph/MeshWeaver#7901 ·
メンテナーはふだん 1 日以内に返信
-
Error in FleetWatchオープンbug sev:H
難易度 5/5 1週間以上 初心者へのやさしさ 15/100
Systemorph/MeshWeaver#7896 · コメント 9 件 ·
メンテナーはふだん 1 日以内に返信
-
bug sev:L
難易度 4/5 3〜5日 初心者へのやさしさ 20/100
Systemorph/MeshWeaver#7893 · コメント 9 件 ·
メンテナーはふだん 1 日以内に返信
-
PodHubNotHereException in PodHubGrain.Deliver対応中かも @rbuergi が今日担当しました。 オープンbug sev:L
難易度 4/5 3〜5日 初心者へのやさしさ 20/100
Systemorph/MeshWeaver#7888 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
Systemorph/MeshWeaver の issue をすべて見る
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 80/100
Unity-Technologies/unity-agent-plugin#118 ·
メンテナーはふだん 1 日以内に返信
-
The Recommended preset turns on Import Uno DSP, which only works with the Material theme対応中かも @agneszitte が今日担当しました。 オープン
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
unoplatform/uno.templates#2388 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
eyalgolan/statecraft-israel#2732 ·
メンテナーはふだん 1 日以内に返信
-
要トリアージ
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
メンテナーはふだん 1 日以内に返信
-
kind/chore status/draft
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
Altinn/altinn-events#1158 ·
メンテナーはふだん 1 日以内に返信