@@ -633,42 +633,33 @@ rebuild_indexes(const repack_table *table)
633
633
*/
634
634
index_jobs [i ].status = FINISHED ;
635
635
}
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. */
645
638
index_jobs [i ].status = INPROGRESS ;
646
639
index_jobs [i ].worker_idx = i ;
647
640
elog (DEBUG2 , "Worker %d building index: %s" , i ,
648
641
index_jobs [i ].create_index );
649
642
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
-
661
643
if (!(PQsendQuery (workers .conns [i ], index_jobs [i ].create_index )))
662
644
{
663
645
elog (WARNING , "Error sending async query: %s\n%s" ,
664
646
index_jobs [i ].create_index ,
665
647
PQerrorMessage (workers .conns [i ]));
648
+ PQclear (res );
666
649
have_error = true;
667
650
goto cleanup ;
668
651
}
669
-
670
652
}
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 ;
672
663
673
664
/* Now go through our index builds, and look for any which is
674
665
* reported complete. Reassign that worker to the next index to
@@ -724,8 +715,9 @@ rebuild_indexes(const repack_table *table)
724
715
{
725
716
index_jobs [i ].status = INPROGRESS ;
726
717
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 );
729
721
730
722
if (!(PQsendQuery (workers .conns [freed_worker ],
731
723
index_jobs [i ].create_index ))) {
0 commit comments