Skip to content

The non-UTC log refusal names the log, not deadlocks (#2993) - #4070

Merged
erikdarlingdata merged 1 commit into
devfrom
feature/2993-log-zone-refusal-names-every-reader
Sep 23, 2026
Merged

erikdarlingdata merged 1 commit into
devfrom
feature/2993-log-zone-refusal-names-every-reader

Conversation

@erikdarlingdata

Copy link
Copy Markdown
Owner

Why

After today's deploy to DARLING01, the PG18 target's pg_log_events collector recorded this refusal, as it has done since 09-19. That target's log_timezone is America/Los_Angeles:

The PostgreSQL server log on this target is timestamped 'PDT', which is not a zero-offset zone: log_timezone is not UTC, so every timestamp in its deadlock reports is local time. Nothing was stored this cycle, and this is NOT 'no deadlocks were detected'. ...

The refusal itself is correct. The words are not: this was a log events row, not a deadlock row. PgLogEntryAssembler is the one place that throws PgLogTimezoneUnsupportedException, and both pg_log_events (PgLogEventClassifier) and pg_deadlocks (PgDeadlockLogParser) read the log through it. The message was written for deadlocks in #3001.

What changes

  • The message now names the log, not deadlocks. It says that the collector stored nothing and that this is NOT an empty log. Then it says why the lines are refused instead of converted, and how to set log_timezone = 'UTC'. It keeps the zone token, the setting name, the CST example, the parameter group for managed PostgreSQL, and the reload without a restart. The message follows the plain-English rules and has no dashes or semicolons.
  • The Lite test that pinned "NOT 'no deadlocks were detected'" now pins "this is NOT an empty log", and it fails if the word "deadlock" comes back.
  • The exception's doc comment and the worker's catch-arm comment now say that both log readers throw it.

The CHANGELOG entry is in the buffer for the pre-release splice.

Test plan

  • Lite.Tests PgDeadlockLogParserTests: 74 passed.
  • Darling.Tests PgLogEventsPipelineTests, RdsDeadlockIngestorTests, RdsLogEventIngestorTimezoneTests, PgDeadlockLogTimezoneTests: 66 passed.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Ua31ugERL5DmhFVRtf6keQ

DARLING01's PG18 target (log_timezone America/Los_Angeles) records this
refusal on pg_log_events, and the message said "every timestamp in its
deadlock reports" and "NOT 'no deadlocks were detected'". The one throw
site is PgLogEntryAssembler, which both PgLogEventClassifier
(pg_log_events) and PgDeadlockLogParser (pg_deadlocks) read through, so
the text written for deadlocks in #3001 now shows on log-event rows too.

The message now names the log and says it is NOT an empty log. It keeps
the zone token, log_timezone, the CST example, the parameter-group note
and the reload-without-restart note, and drops the dashes and the
semicolon. Lite's pin moves to "this is NOT an empty log" and fails if
"deadlock" comes back. The exception's doc comment and the worker's catch
arm comment name both readers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ua31ugERL5DmhFVRtf6keQ
@erikdarlingdata
erikdarlingdata marked this pull request as ready for review September 23, 2026 20:42
@erikdarlingdata
erikdarlingdata merged commit 29f9098 into dev Sep 23, 2026
15 of 16 checks passed
@erikdarlingdata
erikdarlingdata deleted the feature/2993-log-zone-refusal-names-every-reader branch September 23, 2026 20:43
erikdarlingdata added a commit that referenced this pull request Sep 23, 2026
…ntries in their sections (#4080)

Adds 42 entries and 42 link refs (#3992, #3995, #3996, #3998, #4001, #4002, #4003, #4007, #4010, #4011, #4013, #4015, #4020, #4022, #4025, #4029, #4030, #4031, #4036, #4038, #4039, #4040, #4044, #4047, #4048, #4049, #4050, #4051, #4055, #4061, #4063, #4064, #4065, #4066, #4067, #4068, #4069, #4070, #4071, #4073, #4074, #4078). Each PR's entry was buffered, and this lands every entry whose PR was merged on origin/dev when it ran.

#3989 left 26 entries under bare 'Changed' and 'Fixed' lines above '### Added'. They move into '### Changed' and '### Fixed', below the new entries, and one blank line stays under [Unreleased].


Claude-Session: https://claude.ai/code/session_01Ua31ugERL5DmhFVRtf6keQ

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant