Commit e37360d5 authored by Robert Haas's avatar Robert Haas

Improve comment in hashsearch.c.

Typo fix from Mithun Cy; other improvements by me.
parent 1586317c
...@@ -334,19 +334,20 @@ _hash_first(IndexScanDesc scan, ScanDirection dir) ...@@ -334,19 +334,20 @@ _hash_first(IndexScanDesc scan, ScanDirection dir)
so->hashso_bucket_buf = buf; so->hashso_bucket_buf = buf;
/* /*
* If the bucket split is in progress, then while scanning the bucket * If a bucket split is in progress, then while scanning the bucket being
* being populated, we need to skip tuples that are moved from bucket * populated, we need to skip tuples that were copied from bucket being
* being split. We need to maintain the pin on bucket being split to * split. We also need to maintain a pin on the bucket being split to
* ensure that split-cleanup work done by vacuum doesn't remove tuples * ensure that split-cleanup work done by vacuum doesn't remove tuples
* from it till this scan is done. We need to main to maintain the pin on * from it till this scan is done. We need to maintain a pin on the
* bucket being populated to ensure that vacuum doesn't squeeze that * bucket being populated to ensure that vacuum doesn't squeeze that
* bucket till this scan is complete, otherwise the ordering of tuples * bucket till this scan is complete; otherwise, the ordering of tuples
* can't be maintained during forward and backward scans. Here, we have * can't be maintained during forward and backward scans. Here, we have
* to be cautious about locking order, first acquire the lock on bucket * to be cautious about locking order: first, acquire the lock on bucket
* being split, release the lock on it, but not pin, then acquire the lock * being split; then, release the lock on it but not the pin; then,
* on bucket being populated and again re-verify whether the bucket split * acquire a lock on bucket being populated and again re-verify whether
* still is in progress. First acquiring lock on bucket being split * the bucket split is still in progress. Acquiring the lock on bucket
* ensures that the vacuum waits for this scan to finish. * being split first ensures that the vacuum waits for this scan to
* finish.
*/ */
if (H_BUCKET_BEING_POPULATED(opaque)) if (H_BUCKET_BEING_POPULATED(opaque))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment