Skip to content

Commit 8ab54cc

Browse files
committed
Small fixes related to the concurrent_indexes changes.
Move PQsetnonblocking() call to setup_workers(), and make sure we're not forgetting any workers.
1 parent 509e568 commit 8ab54cc

File tree

1 file changed

+16
-24
lines changed

1 file changed

+16
-24
lines changed

bin/pg_repack.c

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -633,42 +633,33 @@ rebuild_indexes(const repack_table *table)
633633
*/
634634
index_jobs[i].status = FINISHED;
635635
}
636-
}
637-
PQclear(res);
638-
639-
if (workers.num_workers > 1)
640-
{
641-
/* First time through, assign every available worker to build an index.
642-
*/
643-
for (i = 0; i < num_indexes && i < workers.num_workers; i++)
644-
{
636+
else if (i <= workers.num_workers) {
637+
/* Assign available worker to build an index. */
645638
index_jobs[i].status = INPROGRESS;
646639
index_jobs[i].worker_idx = i;
647640
elog(DEBUG2, "Worker %d building index: %s", i,
648641
index_jobs[i].create_index);
649642

650-
/* Make sure each worker connection can work in non-blocking
651-
* mode.
652-
*/
653-
if (PQsetnonblocking(workers.conns[i], 1))
654-
{
655-
elog(WARNING, "Unable to set worker connection %d "
656-
"non-blocking.", i);
657-
have_error = true;
658-
goto cleanup;
659-
}
660-
661643
if (!(PQsendQuery(workers.conns[i], index_jobs[i].create_index)))
662644
{
663645
elog(WARNING, "Error sending async query: %s\n%s",
664646
index_jobs[i].create_index,
665647
PQerrorMessage(workers.conns[i]));
648+
PQclear(res);
666649
have_error = true;
667650
goto cleanup;
668651
}
669-
670652
}
671-
num_active_workers = i;
653+
/* Else we have more indexes to be built than workers
654+
* available. That's OK, we'll get to them later.
655+
*/
656+
}
657+
PQclear(res);
658+
659+
if (workers.num_workers > 1)
660+
{
661+
/* How many workers we kicked off earlier. */
662+
num_active_workers = num_indexes > workers.num_workers ? workers.num_workers : num_indexes;
672663

673664
/* Now go through our index builds, and look for any which is
674665
* reported complete. Reassign that worker to the next index to
@@ -724,8 +715,9 @@ rebuild_indexes(const repack_table *table)
724715
{
725716
index_jobs[i].status = INPROGRESS;
726717
index_jobs[i].worker_idx = freed_worker;
727-
elog(NOTICE, "Assigning worker %d execute job %d: %s",
728-
freed_worker, i, index_jobs[i].create_index);
718+
elog(NOTICE, "Assigning worker %d to build index #%d: "
719+
"%s", freed_worker, i,
720+
index_jobs[i].create_index);
729721

730722
if (!(PQsendQuery(workers.conns[freed_worker],
731723
index_jobs[i].create_index))) {

0 commit comments

Comments
 (0)