Skip to content

Conversation

@suresh-dev-fujitsu
Copy link

Description
pg_statsinfo reads PostgreSQL CSV logs, parses each entry, and inserts the data into monitoring tables. In certain cases—such as delayed log flushing or during log rotation—it may encounter a partially written CSV log line and incorrectly treat it as complete.

This can result in:

  • Skipping the remaining portion of the actual log line on the next read

  • Malformed parsing due to an incomplete field set

  • Insert failures like: ERROR: invalid input syntax for type timestamp with time zone: "03:32.829 JST"

Fix Summary

  • File offset is now updated only after successfully parsing a complete log entry.

  • Partial lines are safely skipped without updating the read position.

  • Introduced internal tracking variables:

    • last_log_size: detects file growth between reads
    • log_incomplete: tracks possible partial writes and avoids infinite reprocessing
  • Improved logic for log rotation and partial flush scenarios to ensure stable and reliable log ingestion

Additional Notes
This fix enhances robustness, especially in environments with:

  • High log write latency
  • Small repolog_buffer or frequent log rotation

The behavior was verified through both manual and automated test scenarios using a dedicated partial write reproduction script (see tools/reproduce_partial_write.py)

Description
pg_statsinfo reads PostgreSQL CSV logs, parses each entry, and inserts the data into monitoring tables. In certain cases—such as delayed log flushing or during log rotation—it may encounter a partially written CSV log line and incorrectly treat it as complete.

This can result in:

- Skipping the remaining portion of the actual log line on the next read

- Malformed parsing due to an incomplete field set

- Insert failures like:
  ERROR: invalid input syntax for type timestamp with time zone: "03:32.829 JST"

Fix Summary
- File offset is now updated only after successfully parsing a complete log entry.

- Partial lines are safely skipped without updating the read position.

- Introduced internal tracking variables:

  - last_log_size: detects file growth between reads
  - log_incomplete: tracks possible partial writes and avoids infinite reprocessing

- Improved logic for log rotation and partial flush scenarios to ensure stable and reliable log ingestion

Additional Notes
This fix enhances robustness, especially in environments with:

- High log write latency
- Small repolog_buffer or frequent log rotation

The behavior was verified through both manual and automated test scenarios using a dedicated partial write reproduction script (see tools/reproduce_partial_write.py)
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