Re: Hash Indexes

From: Mithun Cy <mithun(dot)cy(at)enterprisedb(dot)com>
To: Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Hash Indexes
Date: 2016-06-24 09:08:34
Message-ID: CAD__OujhppJoudzG_+V7coPYWrM3CZO8xhtaiZfzW93xySaLBQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Jun 16, 2016 at 12:58 PM, Amit Kapila <amit(dot)kapila16(at)gmail(dot)com>
wrote:

I have a question regarding code changes in *_hash_first*.

+ /*
+ * Conditionally get the lock on primary bucket page for search
while
+ * holding lock on meta page. If we have to wait, then release the
meta
+ * page lock and retry it in a hard way.
+ */
+ bucket = _hash_hashkey2bucket(hashkey,
+
metap->hashm_maxbucket,
+
metap->hashm_highmask,
+
metap->hashm_lowmask);
+
+ blkno = BUCKET_TO_BLKNO(metap, bucket);
+
+ /* Fetch the primary bucket page for the bucket */
+ buf = ReadBuffer(rel, blkno);
+ if (!ConditionalLockBufferShared(buf))

Here we try to take lock on bucket page but I think if successful we do not
recheck whether any split happened before taking lock. Is this not
necessary now?

Also below "if" is always true as we enter here only when outer "if
(retry)" is true.
+ if (retry)
+ {
+ if (oldblkno == blkno)
+ break;
+ _hash_relbuf(rel, buf);
+ }

--
Thanks and Regards
Mithun C Y
EnterpriseDB: http://www.enterprisedb.com

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Langote 2016-06-24 09:24:06 Re: Postgres_fdw join pushdown - wrong results with whole-row reference
Previous Message Michael Paquier 2016-06-24 08:46:16 Re: primary_conninfo missing from pg_stat_wal_receiver