Re: new heapcheck contrib module
Alvaro Herrera <alvherre@2ndquadrant.com>
On 2020-May-13, Peter Geoghegan wrote: > On Wed, May 13, 2020 at 3:10 PM Alvaro Herrera <alvherre@2ndquadrant.com> wrote: > > Hmm. I think we should (try to?) write code that avoids all crashes > > with production builds, but not extend that to assertion failures. > > Assertions are only a problem at all because Mark would like to write > tests that involve a selection of truly corrupt data. That's a new > requirement, and one that I have my doubts about. I agree that this (a test tool that exercises our code against arbitrarily corrupted data pages) is not going to work as a test that all buildfarm members run -- it seems something for specialized buildfarm members to run, or even something that's run outside of the buildfarm, like sqlsmith. Obviously such a tool would not be able to run against an assertion-enabled build, and we shouldn't even try. > I would be willing to make a larger effort to avoid crashing a > backend, since that affects production. I might go to some effort to > not crash with downright adversarial inputs, for example. But it seems > inappropriate to take extreme measures just to avoid a crash with > extremely contrived inputs that will probably never occur. My sense is > that this is subject to sharply diminishing returns. Completely > nailing down hard crashes from corrupt data seems like the wrong > priority, at the very least. Pursuing that objective over other > objectives sounds like zero-risk bias. I think my initial approach for this would be to use a fuzzing tool that generates data blocks semi-randomly, then uses them as Postgres data pages somehow, and see what happens -- examine any resulting crashes and make individual judgement calls about the fix(es) necessary to prevent each of them. I expect that many such pages would be rejected as corrupt by page header checks. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Add pg_amcheck, a CLI for contrib/amcheck.
- 9706092839db 14.0 landed
-
Refactor and generalize the ParallelSlot machinery.
- f71519e545a3 14.0 landed
-
Generalize parallel slot result handling.
- 418611c84d00 14.0 landed
-
Move some code from src/bin/scripts to src/fe_utils to permit reuse.
- e955bd4b6c2b 14.0 landed
-
Factor pattern-construction logic out of processSQLNamePattern.
- 2c8726c4b0a4 14.0 landed
-
Doc: clean up verify_heapam() documentation.
- 4c49d8fc15ee 14.0 landed
-
Fix more portability issues in new amcheck code.
- 321633e17b07 14.0 landed
-
Fix portability issues in new amcheck test.
- 860593ec3bd1 14.0 landed
-
Try to avoid a compiler warning about using fxid uninitialized.
- 8bb0c9770e80 14.0 landed
-
Extend amcheck to check heap pages.
- 866e24d47db1 14.0 landed
-
Adjust walsender usage of xlogreader, simplify APIs
- 850196b610d2 13.0 cited
-
Improve checking of child pages in contrib/amcheck.
- d114cc538715 13.0 cited
-
Sanitize line pointers within contrib/amcheck.
- a9ce839a3137 12.0 cited
-
Fix possible sorting error when aborting use of abbreviated keys.
- 008c4135ccf6 10.0 cited