Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

ptrack.map compression and decompression #658

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
kr1llin wants to merge 1 commit into postgrespro:master
base: master
Choose a base branch
Loading
from kr1llin:ptrack_compression

Conversation

Copy link

@kr1llin kr1llin commented Sep 17, 2025

Add compression and decompression of ptrack.map using internal libraries.

... taken from backup state (pgBackup current). Compression itself processed using internal libraries. Compute CRC using pgFileGetCRCgz, because of compression.
Add decompression of ptrack.map during restore.
Copy link
Contributor

Напишу здесь единым комментарием.

  1. Что если в момент записи ptrack.map произойдет обрыв соединения (если запись ведется в удаленном режиме) или что-то с файловой системой? Останется частично записанный файл? Лучше использовать атомарные операции и временный файл + rename
  2. В copy_ptrackmap_file всегда устанавливается file->compress_alg = current.compress_alg. Но если сжатие не произошло (компрессия не уменьшила размер файла), при распаковке возможны проблемы, поскольку restore_non_data_file всегда проверяет глобальную опцию включения компрессии. Здесь напрашивается проверка, был ли файл явно сжат, и добавление file->compress_alg = NONE_COMPRESS, если компрессия не сработала
  3. Также в copy_ptrackmap_file используется pgFileGetCRCgz(to_fullpath, use_crc32c, missing_ok) независимо от того, применено ли сжатие. Если файл не был сжат , CRC-функция может давать неверную трактовку. Кроме того, при восстановлении полезно иметь crc по распакованному содержимому, чтобы отличать ошибочную распаковку/повреждение данных.
  4. В нескольких местах pg_malloc, slurpFile и т.п. используются без проверки NULL. Нужны проверки и cleanup, если что-то не так.
  5. Мелочи. В коде есть строка elog(WARNING, "An error occured during compressing ptrack.map: %s", errormsg); — опечатки (occured → occurred, compressing vs decompressing). Точно надо исправлять, а то будут проблемы с чтением логов
  6. Нужны тесты, хотя бы минимальный набор
  7. Убрать лишний ; в file->crc = ...;;. - файл util.c, строка 530
  8. Размер выходного буфера в do_compress
    Сейчас выделяется compressed = pg_malloc(size) (равный входному размеру). Это может быть OK, но лучше:
    Выделять compressBound(size) (для zlib) или использовать тот размер, который возвращает do_compress

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Reviewers
No reviews
Assignees
No one assigned
Labels
None yet
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /