Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit da41d71

Browse files
committed
simplehash: Allow for use in frontend code.
Commit 4899504 removed the largest barrier to use of simplehash in frontend code, but there's one more problem: it uses elog(ERROR, ...) or elog(LOG, ...) in a couple of places. Work around that by changing those to pg_log_error() and pg_log_info() when FRONTEND is defined. Patch by me, reviewed by Andres Freund. Discussion: http://postgr.es/m/CA+Tgmob8oyh02NrZW=xCScB+5GyJ-jVowE3+TWTUmPF=FsGWTA@mail.gmail.com
1 parent 4899504 commit da41d71

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/include/lib/simplehash.h

+12-4
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,14 @@ sh_pow2(uint64 num)
236236
return ((uint64) 1) << sh_log2(num);
237237
}
238238

239+
#ifdef FRONTEND
240+
#define sh_error(...) pg_log_error(__VA_ARGS__)
241+
#define sh_log(...) pg_log_info(__VA_ARGS__)
242+
#else
243+
#define sh_error(...) elog(ERROR, __VA_ARGS__)
244+
#define sh_log(...) elog(LOG, __VA_ARGS__)
245+
#endif
246+
239247
#endif
240248

241249
/*
@@ -258,8 +266,8 @@ SH_COMPUTE_PARAMETERS(SH_TYPE * tb, uint32 newsize)
258266
* Verify that allocation of ->data is possible on this platform, without
259267
* overflowing Size.
260268
*/
261-
if ((((uint64) sizeof(SH_ELEMENT_TYPE)) * size) >= MaxAllocHugeSize)
262-
elog(ERROR, "hash table too large");
269+
if ((((uint64) sizeof(SH_ELEMENT_TYPE)) * size) >= SIZE_MAX / 2)
270+
sh_error("hash table too large");
263271

264272
/* now set size */
265273
tb->size = size;
@@ -549,7 +557,7 @@ SH_INSERT_HASH_INTERNAL(SH_TYPE * tb, SH_KEY_TYPE key, uint32 hash, bool *found)
549557
{
550558
if (tb->size == SH_MAX_SIZE)
551559
{
552-
elog(ERROR, "hash table size exceeded");
560+
sh_error("hash table size exceeded");
553561
}
554562

555563
/*
@@ -1001,7 +1009,7 @@ SH_STAT(SH_TYPE * tb)
10011009
avg_collisions = 0;
10021010
}
10031011

1004-
elog(LOG, "size: " UINT64_FORMAT ", members: %u, filled: %f, total chain: %u, max chain: %u, avg chain: %f, total_collisions: %u, max_collisions: %i, avg_collisions: %f",
1012+
sh_log("size: " UINT64_FORMAT ", members: %u, filled: %f, total chain: %u, max chain: %u, avg chain: %f, total_collisions: %u, max_collisions: %i, avg_collisions: %f",
10051013
tb->size, tb->members, fillfactor, total_chain_length, max_chain_length, avg_chain_length,
10061014
total_collisions, max_collisions, avg_collisions);
10071015
}

0 commit comments

Comments
 (0)