On Mon, Apr 6, 2020 at 5:22 PM James Coleman <jtc...@gmail.com> wrote:
>
> On Mon, Apr 6, 2020 at 5:20 PM James Coleman <jtc...@gmail.com> wrote:
> >
> > On Mon, Apr 6, 2020 at 5:12 PM Tomas Vondra
> > <tomas.von...@2ndquadrant.com> wrote:
> > >
> > > On Mon, Apr 06, 2020 at 04:54:38PM -0400, Alvaro Herrera wrote:
> > > >On 2020-Apr-06, Tom Lane wrote:
> > > >
> > > >> Locally, things pass without force_parallel_mode, but turning it on
> > > >> produces failures that look similar to rhinoceros's (didn't examine
> > > >> other BF members).
> > > >
> > > >FWIW I looked at the eight failures there were about fifteen minutes ago
> > > >and they were all identical.  I can confirm that, in my laptop, the
> > > >tests work without that GUC, and fail in exactly that way with it.
> > > >
> > >
> > > Yes, there's a thinko in show_incremental_sort_info() and it returns too
> > > soon. I'll push a fix in a minute.
> >
> > I'm stepping through this in a debugger; is what you're considering
> > that the for loop through the workers is off by one?
>
> Oh, nevermind, misread that.
>
> Looks like if the leader doesn't participate, then we don't show
> details for workers.
>
> Tomas: Do you already have a patch? If not, I can work one up.

Well, already have it, so I'll send it just in case.

James
diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index 62c86ecdc5..c31f3e0987 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -2880,19 +2880,22 @@ show_incremental_sort_info(IncrementalSortState *incrsortstate,
 
 	fullsortGroupInfo = &incrsortstate->incsort_info.fullsortGroupInfo;
 
-	if (!(es->analyze && fullsortGroupInfo->groupCount > 0))
+	if (!es->analyze)
 		return;
 
-	show_incremental_sort_group_info(fullsortGroupInfo, "Full-sort", true, es);
-	prefixsortGroupInfo = &incrsortstate->incsort_info.prefixsortGroupInfo;
-	if (prefixsortGroupInfo->groupCount > 0)
+	if (fullsortGroupInfo->groupCount > 0)
 	{
+		show_incremental_sort_group_info(fullsortGroupInfo, "Full-sort", true, es);
+		prefixsortGroupInfo = &incrsortstate->incsort_info.prefixsortGroupInfo;
+		if (prefixsortGroupInfo->groupCount > 0)
+		{
+			if (es->format == EXPLAIN_FORMAT_TEXT)
+				appendStringInfo(es->str, " ");
+			show_incremental_sort_group_info(prefixsortGroupInfo, "Presorted", false, es);
+		}
 		if (es->format == EXPLAIN_FORMAT_TEXT)
-			appendStringInfo(es->str, " ");
-		show_incremental_sort_group_info(prefixsortGroupInfo, "Presorted", false, es);
+			appendStringInfo(es->str, "\n");
 	}
-	if (es->format == EXPLAIN_FORMAT_TEXT)
-		appendStringInfo(es->str, "\n");
 
 	if (incrsortstate->shared_info != NULL)
 	{
diff --git a/src/test/regress/sql/incremental_sort.sql b/src/test/regress/sql/incremental_sort.sql
index 3b359efa29..c46443358a 100644
--- a/src/test/regress/sql/incremental_sort.sql
+++ b/src/test/regress/sql/incremental_sort.sql
@@ -1,3 +1,5 @@
+set force_parallel_mode = regress;
+
 -- When we have to sort the entire table, incremental sort will
 -- be slower than plain sort, so it should not be used.
 explain (costs off)

Reply via email to