pgsql: Switch to CRC-32C in WAL and other places.

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема pgsql: Switch to CRC-32C in WAL and other places.
Дата
Msg-id E1XlahJ-0004JR-W8@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Switch to CRC-32C in WAL and other places.

The old algorithm was found to not be the usual CRC-32 algorithm, used by
Ethernet et al. We were using a non-reflected lookup table with code meant
for a reflected lookup table. That's a strange combination that AFAICS does
not correspond to any bit-wise CRC calculation, which makes it difficult to
reason about its properties. Although it has worked well in practice, seems
safer to use a well-known algorithm.

Since we're changing the algorithm anyway, we might as well choose a
different polynomial. The Castagnoli polynomial has better error-correcting
properties than the traditional CRC-32 polynomial, even if we had
implemented it correctly. Another reason for picking that is that some new
CPUs have hardware support for calculating CRC-32C, but not CRC-32, let
alone our strange variant of it. This patch doesn't add any support for such
hardware, but a future patch could now do that.

The old algorithm is kept around for tsquery and pg_trgm, which use the
values in indexes that need to remain compatible so that pg_upgrade works.
While we're at it, share the old lookup table for CRC-32 calculation
between hstore, ltree and core. They all use the same table, so might as
well.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/5028f22f6eb0579890689655285a4778b4ffc460

Modified Files
--------------
contrib/hstore/Makefile                     |    2 +-
contrib/hstore/crc32.c                      |  106 -------------------------
contrib/hstore/crc32.h                      |   13 ---
contrib/hstore/hstore_gist.c                |   16 +++-
contrib/ltree/crc32.c                       |  114 +++++----------------------
contrib/pg_trgm/trgm_op.c                   |    6 +-
src/backend/access/transam/twophase.c       |   24 +++---
src/backend/access/transam/xlog.c           |   50 ++++++------
src/backend/access/transam/xlogreader.c     |   12 +--
src/backend/replication/logical/snapbuild.c |   28 +++----
src/backend/replication/slot.c              |   20 ++---
src/backend/utils/adt/tsgistidx.c           |    6 +-
src/backend/utils/adt/tsquery.c             |   12 +--
src/backend/utils/cache/relmapper.c         |   16 ++--
src/bin/pg_controldata/pg_controldata.c     |   12 +--
src/bin/pg_resetxlog/pg_resetxlog.c         |   30 +++----
src/include/access/xlog_internal.h          |    2 +-
src/include/catalog/catversion.h            |    2 +-
src/include/utils/pg_crc.h                  |   93 ++++++++++++++++++----
src/include/utils/pg_crc_tables.h           |   77 +++++++++++++++++-
20 files changed, 300 insertions(+), 341 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: pgsql: Support frontend-backend protocol communication using a shm_mq.
Следующее
От: Heikki Linnakangas
Дата:
Сообщение: pgsql: Remove support for 64-bit CRC.