v19-0002-Convert-simplehash-hash-functions-on-strings-to-.patch
text/x-patch
Filename: v19-0002-Convert-simplehash-hash-functions-on-strings-to-.patch
Type: text/x-patch
Part: 2
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v19-0002
Subject: Convert simplehash hash functions on strings to fasthash
| File | + | − |
|---|---|---|
| src/bin/pg_combinebackup/load_manifest.c | 9 | 3 |
| src/bin/pg_dump/pg_dumpall.c | 9 | 3 |
| src/bin/pg_rewind/filemap.c | 9 | 3 |
| src/bin/pg_verifybackup/pg_verifybackup.c | 9 | 3 |
| src/common/blkreftable.c | 2 | 2 |
From 3f87dc06e40dab708a70fe1a96cf9d909b6652cb Mon Sep 17 00:00:00 2001
From: John Naylor <john.naylor@postgresql.org>
Date: Tue, 5 Mar 2024 16:59:39 +0700
Subject: [PATCH v19 2/3] Convert simplehash hash functions on strings to
fasthash
---
src/bin/pg_combinebackup/load_manifest.c | 12 +++++++++---
src/bin/pg_dump/pg_dumpall.c | 12 +++++++++---
src/bin/pg_rewind/filemap.c | 12 +++++++++---
src/bin/pg_verifybackup/pg_verifybackup.c | 12 +++++++++---
src/common/blkreftable.c | 4 ++--
5 files changed, 38 insertions(+), 14 deletions(-)
diff --git a/src/bin/pg_combinebackup/load_manifest.c b/src/bin/pg_combinebackup/load_manifest.c
index 2b8e74fcf3..514e657ddc 100644
--- a/src/bin/pg_combinebackup/load_manifest.c
+++ b/src/bin/pg_combinebackup/load_manifest.c
@@ -15,7 +15,7 @@
#include <sys/stat.h>
#include <unistd.h>
-#include "common/hashfn.h"
+#include "common/hashfn_unstable.h"
#include "common/logging.h"
#include "common/parse_manifest.h"
#include "load_manifest.h"
@@ -239,7 +239,13 @@ combinebackup_per_wal_range_cb(JsonManifestParseContext *context,
static uint32
hash_string_pointer(char *s)
{
- unsigned char *ss = (unsigned char *) s;
+ fasthash_state hs;
+ size_t s_len;
- return hash_bytes(ss, strlen(s));
+ fasthash_init(&hs, 0);
+
+ /* Hash string and save the length for tweaking the final mix. */
+ s_len = fasthash_accum_cstring(&hs, s);
+
+ return fasthash_final32(&hs, s_len);
}
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index 491311fe79..00ad33d803 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -21,7 +21,7 @@
#include "catalog/pg_authid_d.h"
#include "common/connect.h"
#include "common/file_utils.h"
-#include "common/hashfn.h"
+#include "common/hashfn_unstable.h"
#include "common/logging.h"
#include "common/string.h"
#include "dumputils.h"
@@ -1941,9 +1941,15 @@ dumpTimestamp(const char *msg)
static uint32
hash_string_pointer(char *s)
{
- unsigned char *ss = (unsigned char *) s;
+ fasthash_state hs;
+ size_t s_len;
- return hash_bytes(ss, strlen(s));
+ fasthash_init(&hs, 0);
+
+ /* Hash string and save the length for tweaking the final mix. */
+ s_len = fasthash_accum_cstring(&hs, s);
+
+ return fasthash_final32(&hs, s_len);
}
/*
diff --git a/src/bin/pg_rewind/filemap.c b/src/bin/pg_rewind/filemap.c
index 255ddf2ffa..fbc8df27ba 100644
--- a/src/bin/pg_rewind/filemap.c
+++ b/src/bin/pg_rewind/filemap.c
@@ -28,7 +28,7 @@
#include "catalog/pg_tablespace_d.h"
#include "common/file_utils.h"
-#include "common/hashfn.h"
+#include "common/hashfn_unstable.h"
#include "common/string.h"
#include "datapagemap.h"
#include "filemap.h"
@@ -829,7 +829,13 @@ decide_file_actions(void)
static uint32
hash_string_pointer(const char *s)
{
- unsigned char *ss = (unsigned char *) s;
+ fasthash_state hs;
+ size_t s_len;
- return hash_bytes(ss, strlen(s));
+ fasthash_init(&hs, 0);
+
+ /* Hash string and save the length for tweaking the final mix. */
+ s_len = fasthash_accum_cstring(&hs, s);
+
+ return fasthash_final32(&hs, s_len);
}
diff --git a/src/bin/pg_verifybackup/pg_verifybackup.c b/src/bin/pg_verifybackup/pg_verifybackup.c
index ae8c18f373..40c48a2e54 100644
--- a/src/bin/pg_verifybackup/pg_verifybackup.c
+++ b/src/bin/pg_verifybackup/pg_verifybackup.c
@@ -18,7 +18,7 @@
#include <sys/stat.h>
#include <time.h>
-#include "common/hashfn.h"
+#include "common/hashfn_unstable.h"
#include "common/logging.h"
#include "common/parse_manifest.h"
#include "fe_utils/simple_list.h"
@@ -923,9 +923,15 @@ should_ignore_relpath(verifier_context *context, char *relpath)
static uint32
hash_string_pointer(char *s)
{
- unsigned char *ss = (unsigned char *) s;
+ fasthash_state hs;
+ size_t s_len;
- return hash_bytes(ss, strlen(s));
+ fasthash_init(&hs, 0);
+
+ /* Hash string and save the length for tweaking the final mix. */
+ s_len = fasthash_accum_cstring(&hs, s);
+
+ return fasthash_final32(&hs, s_len);
}
/*
diff --git a/src/common/blkreftable.c b/src/common/blkreftable.c
index bfa6f7ab5d..980f44c9df 100644
--- a/src/common/blkreftable.c
+++ b/src/common/blkreftable.c
@@ -37,7 +37,7 @@
#endif
#include "common/blkreftable.h"
-#include "common/hashfn.h"
+#include "common/hashfn_unstable.h"
#include "port/pg_crc32c.h"
/*
@@ -124,7 +124,7 @@ struct BlockRefTableEntry
#define SH_KEY_TYPE BlockRefTableKey
#define SH_KEY key
#define SH_HASH_KEY(tb, key) \
- hash_bytes((const unsigned char *) &key, sizeof(BlockRefTableKey))
+ fasthash32((const char *) &key, sizeof(BlockRefTableKey), 0)
#define SH_EQUAL(tb, a, b) (memcmp(&a, &b, sizeof(BlockRefTableKey)) == 0)
#define SH_SCOPE static inline
#ifdef FRONTEND
--
2.43.0