On Fri, Oct 19, 2012 at 11:40 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
> Hitoshi Harada <umi.tan...@gmail.com> writes:
>> On Thu, Oct 18, 2012 at 8:35 AM, Tom Lane <t...@sss.pgh.pa.us> wrote:
>>> I'm not terribly comfortable with trying to use a PG_TRY block to catch
>>> an OOM error - there are too many ways that could break, and this code
>>> path is by definition not very testable.  I think moving up the
>>> expand_table action is probably the best bet.  Will you submit a patch?
>
>> Here it is. I factored out the bucket finding code to re-calculate it
>> after expansion.
>
> I didn't like that too much.  I think a better solution is just to do
> the table expansion at the very start of the function, along the lines
> of the attached patch.  This requires an extra test of the "action"
> parameter, but I think that's probably cheaper than an extra function
> call.  It's definitely cheaper than recalculating the hash etc when
> a split does occur.
>

OK.  Looks better.  But nentries should be bogus a little now?

+               /*
+                * Can't split if running in partitioned mode, nor if frozen, 
nor if
+                * table is the subject of any active hash_seq_search scans.  
Strange
+                * order of these tests is to try to check cheaper conditions 
first.
+                */
+               if (!IS_PARTITIONED(hctl) && !hashp->frozen &&
+                       hctl->nentries / (long) (hctl->max_bucket + 1) >= 
hctl->ffactor &&
+                       !has_seq_scans(hashp))
+                       (void) expand_table(hashp);

hctl->nentries + 1 sounds appropriate?

Thanks,
-- 
Hitoshi Harada


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to