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
Message: Re: Change GUC hashtable to use simplehash?

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