Re: BUG #17774: Assert triggered on brin_minmax_multi.c

From: Dmitry Dolgov <9erthalion6(at)gmail(dot)com>
To: John Naylor <john(dot)naylor(at)enterprisedb(dot)com>
Cc: tharakan(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #17774: Assert triggered on brin_minmax_multi.c
Date: 2023-02-08 10:06:58
Message-ID: 20230208100658.mz2kkeruoma6iqtw@ddolgov.remote.csb
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

> On Wed, Feb 08, 2023 at 04:26:49PM +0700, John Naylor wrote:
> On Mon, Feb 6, 2023 at 3:06 PM PG Bug reporting form <noreply(at)postgresql(dot)org>
> wrote:
> > This assert() is not easily reproducible, but thought the backtraces may
> be
> > interesting.
> >
> > TRAP: FailedAssertion("(delta >= 0) && (delta <= 1)", File:
> > "brin_minmax_multi.c", Line: 2393, PID: 2922100)
>
> > #2 0x000055e143f0ae8b in ExceptionalCondition (
> > conditionName=0x55e143f92604 "(delta >= 0) && (delta <= 1)",
> > errorType=0x55e143f91ef4 "FailedAssertion",
> > fileName=0x55e143f91ee0 "brin_minmax_multi.c", lineNumber=2393)
> > at assert.c:69
> > No locals.
> > #3 0x000055e1437e8972 in brin_minmax_multi_distance_inet (
> > fcinfo=0x7ffc448234f0) at brin_minmax_multi.c:2393
> > delta = -2.3283064365386963e-10
> > i = -1
> > len = 4
> > addra = 0x55e14ee95fc0 ""
> > addrb = 0x55e14ee95fe0 ""
> > ipa = 0x55e14d95a1e0
> > ipb = 0x55e149a6fdc8
> > lena = 0
> > lenb = 32
>
> Thanks for the report! From the stack trace we can see that it computed a
> negative delta, coming from:
>
> /* Calculate the difference between the addresses. */
> delta = 0;
> for (i = len - 1; i >= 0; i--)
> {
> unsigned char a = addra[i];
> unsigned char b = addrb[i];
>
> delta += (float8) b - (float8) a;
> delta /= 256;
> }
> Assert((delta >= 0) && (delta <= 1));
>
> I wonder if it needs to be something like "delta += Abs((float8) b -
> (float8) a);".

The negative delta might be only a consequence. From what I see it's
called from build_distances, and the idea is to find the gaps between
the max value of the current interval and the min value of the next one,
so they should be ordered and delta should be always positive.

In fact, I've just reproduced it by randomly inserting some inets into
the test table, let me see if I can get a stable reproducer.

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Dmitry Dolgov 2023-02-08 10:16:18 Re: BUG #17774: Assert triggered on brin_minmax_multi.c
Previous Message John Naylor 2023-02-08 09:26:49 Re: BUG #17774: Assert triggered on brin_minmax_multi.c