Remove unneeded field from VACUUM state.
Bugfix commit 5fc89376
effectively made the lock_waiter_detected field
from vacuumlazy.c's global state struct into private state owned by
lazy_truncate_heap(). Finish this off by replacing the struct field
with a local variable.
This commit is contained in:
parent
ad2da246c6
commit
958cfbcf2d
|
@ -351,7 +351,6 @@ typedef struct LVRelState
|
||||||
BlockNumber pages_removed; /* pages remove by truncation */
|
BlockNumber pages_removed; /* pages remove by truncation */
|
||||||
BlockNumber lpdead_item_pages; /* # pages with LP_DEAD items */
|
BlockNumber lpdead_item_pages; /* # pages with LP_DEAD items */
|
||||||
BlockNumber nonempty_pages; /* actually, last nonempty page + 1 */
|
BlockNumber nonempty_pages; /* actually, last nonempty page + 1 */
|
||||||
bool lock_waiter_detected;
|
|
||||||
|
|
||||||
/* Statistics output by us, for table */
|
/* Statistics output by us, for table */
|
||||||
double new_rel_tuples; /* new estimated total # of tuples */
|
double new_rel_tuples; /* new estimated total # of tuples */
|
||||||
|
@ -439,7 +438,8 @@ static IndexBulkDeleteResult *lazy_cleanup_one_index(Relation indrel,
|
||||||
static bool should_attempt_truncation(LVRelState *vacrel,
|
static bool should_attempt_truncation(LVRelState *vacrel,
|
||||||
VacuumParams *params);
|
VacuumParams *params);
|
||||||
static void lazy_truncate_heap(LVRelState *vacrel);
|
static void lazy_truncate_heap(LVRelState *vacrel);
|
||||||
static BlockNumber count_nondeletable_pages(LVRelState *vacrel);
|
static BlockNumber count_nondeletable_pages(LVRelState *vacrel,
|
||||||
|
bool *lock_waiter_detected);
|
||||||
static long compute_max_dead_tuples(BlockNumber relblocks, bool hasindex);
|
static long compute_max_dead_tuples(BlockNumber relblocks, bool hasindex);
|
||||||
static void lazy_space_alloc(LVRelState *vacrel, int nworkers,
|
static void lazy_space_alloc(LVRelState *vacrel, int nworkers,
|
||||||
BlockNumber relblocks);
|
BlockNumber relblocks);
|
||||||
|
@ -929,7 +929,6 @@ lazy_scan_heap(LVRelState *vacrel, VacuumParams *params, bool aggressive)
|
||||||
vacrel->pages_removed = 0;
|
vacrel->pages_removed = 0;
|
||||||
vacrel->lpdead_item_pages = 0;
|
vacrel->lpdead_item_pages = 0;
|
||||||
vacrel->nonempty_pages = 0;
|
vacrel->nonempty_pages = 0;
|
||||||
vacrel->lock_waiter_detected = false;
|
|
||||||
|
|
||||||
/* Initialize instrumentation counters */
|
/* Initialize instrumentation counters */
|
||||||
vacrel->num_index_scans = 0;
|
vacrel->num_index_scans = 0;
|
||||||
|
@ -3165,6 +3164,7 @@ lazy_truncate_heap(LVRelState *vacrel)
|
||||||
{
|
{
|
||||||
BlockNumber old_rel_pages = vacrel->rel_pages;
|
BlockNumber old_rel_pages = vacrel->rel_pages;
|
||||||
BlockNumber new_rel_pages;
|
BlockNumber new_rel_pages;
|
||||||
|
bool lock_waiter_detected;
|
||||||
int lock_retry;
|
int lock_retry;
|
||||||
|
|
||||||
/* Report that we are now truncating */
|
/* Report that we are now truncating */
|
||||||
|
@ -3187,7 +3187,7 @@ lazy_truncate_heap(LVRelState *vacrel)
|
||||||
* (which is quite possible considering we already hold a lower-grade
|
* (which is quite possible considering we already hold a lower-grade
|
||||||
* lock).
|
* lock).
|
||||||
*/
|
*/
|
||||||
vacrel->lock_waiter_detected = false;
|
lock_waiter_detected = false;
|
||||||
lock_retry = 0;
|
lock_retry = 0;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
|
@ -3207,7 +3207,7 @@ lazy_truncate_heap(LVRelState *vacrel)
|
||||||
* We failed to establish the lock in the specified number of
|
* We failed to establish the lock in the specified number of
|
||||||
* retries. This means we give up truncating.
|
* retries. This means we give up truncating.
|
||||||
*/
|
*/
|
||||||
vacrel->lock_waiter_detected = true;
|
lock_waiter_detected = true;
|
||||||
ereport(elevel,
|
ereport(elevel,
|
||||||
(errmsg("\"%s\": stopping truncate due to conflicting lock request",
|
(errmsg("\"%s\": stopping truncate due to conflicting lock request",
|
||||||
vacrel->relname)));
|
vacrel->relname)));
|
||||||
|
@ -3242,7 +3242,7 @@ lazy_truncate_heap(LVRelState *vacrel)
|
||||||
* other backends could have added tuples to these pages whilst we
|
* other backends could have added tuples to these pages whilst we
|
||||||
* were vacuuming.
|
* were vacuuming.
|
||||||
*/
|
*/
|
||||||
new_rel_pages = count_nondeletable_pages(vacrel);
|
new_rel_pages = count_nondeletable_pages(vacrel, &lock_waiter_detected);
|
||||||
vacrel->blkno = new_rel_pages;
|
vacrel->blkno = new_rel_pages;
|
||||||
|
|
||||||
if (new_rel_pages >= old_rel_pages)
|
if (new_rel_pages >= old_rel_pages)
|
||||||
|
@ -3281,8 +3281,7 @@ lazy_truncate_heap(LVRelState *vacrel)
|
||||||
errdetail_internal("%s",
|
errdetail_internal("%s",
|
||||||
pg_rusage_show(&ru0))));
|
pg_rusage_show(&ru0))));
|
||||||
old_rel_pages = new_rel_pages;
|
old_rel_pages = new_rel_pages;
|
||||||
} while (new_rel_pages > vacrel->nonempty_pages &&
|
} while (new_rel_pages > vacrel->nonempty_pages && lock_waiter_detected);
|
||||||
vacrel->lock_waiter_detected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3291,7 +3290,7 @@ lazy_truncate_heap(LVRelState *vacrel)
|
||||||
* Returns number of nondeletable pages (last nonempty page + 1).
|
* Returns number of nondeletable pages (last nonempty page + 1).
|
||||||
*/
|
*/
|
||||||
static BlockNumber
|
static BlockNumber
|
||||||
count_nondeletable_pages(LVRelState *vacrel)
|
count_nondeletable_pages(LVRelState *vacrel, bool *lock_waiter_detected)
|
||||||
{
|
{
|
||||||
BlockNumber blkno;
|
BlockNumber blkno;
|
||||||
BlockNumber prefetchedUntil;
|
BlockNumber prefetchedUntil;
|
||||||
|
@ -3343,7 +3342,7 @@ count_nondeletable_pages(LVRelState *vacrel)
|
||||||
(errmsg("\"%s\": suspending truncate due to conflicting lock request",
|
(errmsg("\"%s\": suspending truncate due to conflicting lock request",
|
||||||
vacrel->relname)));
|
vacrel->relname)));
|
||||||
|
|
||||||
vacrel->lock_waiter_detected = true;
|
*lock_waiter_detected = true;
|
||||||
return blkno;
|
return blkno;
|
||||||
}
|
}
|
||||||
starttime = currenttime;
|
starttime = currenttime;
|
||||||
|
|
Loading…
Reference in New Issue