threads / patch / 61705

patcht0613: mark as leak-free

Subject: [PATCH] t0613: mark as leak-free

## tl;dr

11 messages between Jun 30, 2024 and Jul 24, 2024. Diffs are folded; open one to read it.

replies: 10people: 4as markdown or json

Rubén Justo· Jun 30, 2024, 06:46 UTC · lore
We can mark t0613 as leak-free:
    $ make test SANITIZE=leak GIT_TEST_PASSING_SANITIZE_LEAK=check GIT_TEST_SANITIZE_LEAK_LOG=true T=t0613-reftable-write-options.sh
    [...]
    *** t0613-reftable-write-options.sh ***
    in GIT_TEST_PASSING_SANITIZE_LEAK=check mode, setting --invert-exit-code for TEST_PASSES_SANITIZE_LEAK != true
    ok 1 - default write options
    ok 2 - disabled reflog writes no log blocks
    ok 3 - many refs results in multiple blocks
    ok 4 - tiny block size leads to error
    ok 5 - small block size leads to multiple ref blocks
    ok 6 - small block size fails with large reflog message
    ok 7 - block size exceeding maximum supported size
    ok 8 - restart interval at every single record
    ok 9 - restart interval exceeding maximum supported interval
    ok 10 - object index gets written by default with ref index
    ok 11 - object index can be disabled
    # passed all 11 test(s)
    1..11
    # faking up non-zero exit with --invert-exit-code
    make[2]: *** [Makefile:75: t0613-reftable-write-options.sh] Error 1
Do it.
Signed-off-by: Rubén Justo <rjusto@gmail.com>
---

I'm not sure why this simple change has fallen through the cracks. Therefore, it's possible that I'm missing something.

I'd appreciate if someone could double-check.
Thanks.
 t/t0613-reftable-write-options.sh | 1 +
 1 file changed, 1 insertion(+)
Show changes to t/t0613-reftable-write-options.sh +1 −0
diff --git a/t/t0613-reftable-write-options.sh b/t/t0613-reftable-write-options.sh
index e2708e11d5..b1c6c97524 100755
--- a/t/t0613-reftable-write-options.sh
+++ b/t/t0613-reftable-write-options.sh
@@ -16,6 +16,7 @@ export GIT_TEST_DEFAULT_HASH
 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master
 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 test_expect_success 'default write options' '
-- 
2.45.1
Jeff King· Jul 1, 2024, 03:57 UTC · re: Rubén Justo · lore

Re: [PATCH] t0613: mark as leak-free

On Sun, Jun 30, 2024 at 08:46:38AM +0200, Rubén Justo wrote:
Show 6 quoted lines
> We can mark t0613 as leak-free:
> [...]
> I'm not sure why this simple change has fallen through the cracks.
> Therefore, it's possible that I'm missing something.
> 
> I'd appreciate if someone could double-check.

I'd noticed it, too, while doing recent leak fixes. But since Patrick has been working on leaks and is the go-to person for reftables, I assumed he had already seen it and there was something clever going on. ;)

I also get a passing result from t0612 (and I do have JGit available, so it actually runs the tests).

I also get funny results from t4255, but I think we can ignore them. It's known breakages vanishing, which I guess is just some sub-program returning failure due to a leak and changing the test results.

So anyway, this patch looks good to me, but probably we could squash t0612 into it, as well.

-Peff
Rubén Justo· Jul 1, 2024, 19:35 UTC · re: Jeff King · lore

Re: [PATCH] t0613: mark as leak-free

On Sun, Jun 30, 2024 at 11:57:59PM -0400, Jeff King wrote:
Show 15 quoted lines
> On Sun, Jun 30, 2024 at 08:46:38AM +0200, Rubén Justo wrote:
> 
> > We can mark t0613 as leak-free:
> > [...]
> > I'm not sure why this simple change has fallen through the cracks.
> > Therefore, it's possible that I'm missing something.
> > 
> > I'd appreciate if someone could double-check.
> 
> I'd noticed it, too, while doing recent leak fixes. But since Patrick
> has been working on leaks and is the go-to person for reftables, I
> assumed he had already seen it and there was something clever going on. ;)
> 
> I also get a passing result from t0612 (and I do have JGit available, so
> it actually runs the tests).

I have no idea how JGit works, and I didn't have it installed either. But after a quick test, I can confirm that t0612 can also be marked as leak-free.

I'll respond to this message shortly with a patch to fix that.
Show 9 quoted lines
> 
> I also get funny results from t4255, but I think we can ignore them.
> It's known breakages vanishing, which I guess is just some sub-program
> returning failure due to a leak and changing the test results.
> 
> So anyway, this patch looks good to me, but probably we could squash
> t0612 into it, as well.
> 
> -Peff
Thank you!
Rubén Justo· Jul 1, 2024, 19:38 UTC · re: Rubén Justo · lore

t0612: mark as leak-free

A quick test tell us that t0612 does not trigger any leak:
    $ make SANITIZE=leak test GIT_TEST_PASSING_SANITIZE_LEAK=check GIT_TEST_SANITIZE_LEAK_LOG=true GIT_TEST_OPTS=-i T=t0612-reftable-jgit-compatibility.sh
    [...]
    *** t0612-reftable-jgit-compatibility.sh ***
    in GIT_TEST_PASSING_SANITIZE_LEAK=check mode, setting --invert-exit-code for TEST_PASSES_SANITIZE_LEAK != true
    ok 1 - CGit repository can be read by JGit
    ok 2 - JGit repository can be read by CGit
    ok 3 - mixed writes from JGit and CGit
    ok 4 - JGit can read multi-level index
    # passed all 4 test(s)
    1..4
    # faking up non-zero exit with --invert-exit-code
    make[2]: *** [Makefile:75: t0612-reftable-jgit-compatibility.sh] Error 1

Let's mark it as leak-free to silence the machinery activated by `GIT_TEST_PASSING_SANITIZE_LEAK=check`.

Reported-by: Jeff King <peff@peff.net>
Signed-off-by: Rubén Justo <rjusto@gmail.com>
---
 t/t0612-reftable-jgit-compatibility.sh | 1 +
 1 file changed, 1 insertion(+)
Show changes to t/t0612-reftable-jgit-compatibility.sh +1 −0
diff --git a/t/t0612-reftable-jgit-compatibility.sh b/t/t0612-reftable-jgit-compatibility.sh
index d0d7e80b49..84922153ab 100755
--- a/t/t0612-reftable-jgit-compatibility.sh
+++ b/t/t0612-reftable-jgit-compatibility.sh
@@ -11,6 +11,7 @@ export GIT_TEST_DEFAULT_REF_FORMAT
 GIT_TEST_SPLIT_INDEX=0
 export GIT_TEST_SPLIT_INDEX
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 if ! test_have_prereq JGIT
-- 
2.45.1
Eric Sunshine· Jul 1, 2024, 19:40 UTC · re: Rubén Justo · lore

Re: t0612: mark as leak-free

On Mon, Jul 1, 2024 at 3:38 PM Rubén Justo <rjusto@gmail.com> wrote:
> A quick test tell us that t0612 does not trigger any leak:
s/tell/tells/
Show 8 quoted lines
>     $ make SANITIZE=leak test GIT_TEST_PASSING_SANITIZE_LEAK=check GIT_TEST_SANITIZE_LEAK_LOG=true GIT_TEST_OPTS=-i T=t0612-reftable-jgit-compatibility.sh
>     [...]
>
> Let's mark it as leak-free to silence the machinery activated by
> `GIT_TEST_PASSING_SANITIZE_LEAK=check`.
>
> Reported-by: Jeff King <peff@peff.net>
> Signed-off-by: Rubén Justo <rjusto@gmail.com>
Rubén Justo· Jul 1, 2024, 19:44 UTC · re: Rubén Justo · lore

[PATCH] t0612: mark as leak-free

A quick test tells us that t0612 does not trigger any leak:
    $ make SANITIZE=leak test GIT_TEST_PASSING_SANITIZE_LEAK=check GIT_TEST_SANITIZE_LEAK_LOG=true GIT_TEST_OPTS=-i T=t0612-reftable-jgit-compatibility.sh
    [...]
    *** t0612-reftable-jgit-compatibility.sh ***
    in GIT_TEST_PASSING_SANITIZE_LEAK=check mode, setting --invert-exit-code for TEST_PASSES_SANITIZE_LEAK != true
    ok 1 - CGit repository can be read by JGit
    ok 2 - JGit repository can be read by CGit
    ok 3 - mixed writes from JGit and CGit
    ok 4 - JGit can read multi-level index
    # passed all 4 test(s)
    1..4
    # faking up non-zero exit with --invert-exit-code
    make[2]: *** [Makefile:75: t0612-reftable-jgit-compatibility.sh] Error 1

Let's mark it as leak-free to silence the machinery activated by `GIT_TEST_PASSING_SANITIZE_LEAK=check`.

Reported-by: Jeff King <peff@peff.net>
Signed-off-by: Rubén Justo <rjusto@gmail.com>
---

Now with the correct subject and the correction to the error pointed out by Eric.

Thanks.
 t/t0612-reftable-jgit-compatibility.sh | 1 +
 1 file changed, 1 insertion(+)
Show changes to t/t0612-reftable-jgit-compatibility.sh +1 −0
diff --git a/t/t0612-reftable-jgit-compatibility.sh b/t/t0612-reftable-jgit-compatibility.sh
index d0d7e80b49..84922153ab 100755
--- a/t/t0612-reftable-jgit-compatibility.sh
+++ b/t/t0612-reftable-jgit-compatibility.sh
@@ -11,6 +11,7 @@ export GIT_TEST_DEFAULT_REF_FORMAT
 GIT_TEST_SPLIT_INDEX=0
 export GIT_TEST_SPLIT_INDEX
 
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 if ! test_have_prereq JGIT
-- 
2.45.1
Patrick Steinhardt· Jul 22, 2024, 09:02 UTC · re: Jeff King · lore

Re: [PATCH] t0613: mark as leak-free

On Sun, Jun 30, 2024 at 11:57:59PM -0400, Jeff King wrote:
Show 12 quoted lines
> On Sun, Jun 30, 2024 at 08:46:38AM +0200, Rubén Justo wrote:
> 
> > We can mark t0613 as leak-free:
> > [...]
> > I'm not sure why this simple change has fallen through the cracks.
> > Therefore, it's possible that I'm missing something.
> > 
> > I'd appreciate if someone could double-check.
> 
> I'd noticed it, too, while doing recent leak fixes. But since Patrick
> has been working on leaks and is the go-to person for reftables, I
> assumed he had already seen it and there was something clever going on. ;)

Nah, you assumed too much :) I just forgot to mark this as leak-free and the topic crossed with my memory-leak-fix topics, so I didn't yet find the time to fix it.

It does highlight an issue though: I think memory leak checks should be opt-out rather than opt-in by now. Most of our tests run just fine with the memory leak checker enabled, and that's also where we want to be headed. So making tests opt-out would likely raise more eyebrows when new tests are being added that explicitly opt out.

The only reason I didn't send a patch like this yet is that it would of course create quite a bit of churn in our tests. I'm not sure whether that churn is really worth it, or whether we should instead just continue fixing tests until we can get rid of this marking altogether because all of our tests pass.

Patrick
Jeff King· Jul 23, 2024, 21:03 UTC · re: Patrick Steinhardt · lore

Re: [PATCH] t0613: mark as leak-free

On Mon, Jul 22, 2024 at 11:02:24AM +0200, Patrick Steinhardt wrote:
Show 7 quoted lines
> > I'd noticed it, too, while doing recent leak fixes. But since Patrick
> > has been working on leaks and is the go-to person for reftables, I
> > assumed he had already seen it and there was something clever going on. ;)
> 
> Nah, you assumed too much :) I just forgot to mark this as leak-free and
> the topic crossed with my memory-leak-fix topics, so I didn't yet find
> the time to fix it.
Ah, OK. :) Then I think we did the right thing in your absence.
Show 11 quoted lines
> It does highlight an issue though: I think memory leak checks should be
> opt-out rather than opt-in by now. Most of our tests run just fine with
> the memory leak checker enabled, and that's also where we want to be
> headed. So making tests opt-out would likely raise more eyebrows when
> new tests are being added that explicitly opt out.
> 
> The only reason I didn't send a patch like this yet is that it would of
> course create quite a bit of churn in our tests. I'm not sure whether
> that churn is really worth it, or whether we should instead just
> continue fixing tests until we can get rid of this marking altogether
> because all of our tests pass.

I could see arguments in both directions. I'd worry that by switching the default to "assume leak free", it may end up with misalignment between who introduces the bug and who deals with the fallout.

Right now, if I introduce a test that is leak free but don't mark it, somebody working on leaks later runs in check mode and says "yay, it passes. Let's mark it". It becomes their task to do, but it's an easy-ish task.

If we go the other way, then a new test that _does_ leak means that either:

  1. The original author notices the CI leaks job failing.
     a. They introduced the leak, and it was caught early. Yay!
     b. The leak is in some random part of Git that their test happened
	to trigger. Now they spend effort proving it was not their fault
	before they annotate the test with "does not pass leak".
  2. The original author does not notice. Somebody notices later when
     doing leak-checking (or I guess just running their own CI, if we
     are hitting these by default). Now they are stuck with doing (1a)
     or (1b) themselves, even though they do not care about the original
     topic.

So I dunno. If we think people are paying attention to CI on their topics, and we think that we are close enough to leak-free that (1b) won't come up a lot, it might make sense. I'm not quite sure we're there yet on the latter, but it's mostly gut feeling (and I know things have gotten a bit better recently, too).

I guess the only way to know is to try it, but as you noted, it is a bit of churn to switch between the two states.

-Peff
Rubén Justo· Jul 23, 2024, 23:07 UTC · re: Jeff King · lore

Re* [PATCH] t0613: mark as leak-free

On Tue, Jul 23, 2024 at 05:03:39PM -0400, Jeff King wrote:
Show 11 quoted lines
> On Mon, Jul 22, 2024 at 11:02:24AM +0200, Patrick Steinhardt wrote:
> 
> > > I'd noticed it, too, while doing recent leak fixes. But since Patrick
> > > has been working on leaks and is the go-to person for reftables, I
> > > assumed he had already seen it and there was something clever going on. ;)
> > 
> > Nah, you assumed too much :) I just forgot to mark this as leak-free and
> > the topic crossed with my memory-leak-fix topics, so I didn't yet find
> > the time to fix it.
> 
> Ah, OK. :) Then I think we did the right thing in your absence.
:)
Show 44 quoted lines
> 
> > It does highlight an issue though: I think memory leak checks should be
> > opt-out rather than opt-in by now. Most of our tests run just fine with
> > the memory leak checker enabled, and that's also where we want to be
> > headed. So making tests opt-out would likely raise more eyebrows when
> > new tests are being added that explicitly opt out.
> > 
> > The only reason I didn't send a patch like this yet is that it would of
> > course create quite a bit of churn in our tests. I'm not sure whether
> > that churn is really worth it, or whether we should instead just
> > continue fixing tests until we can get rid of this marking altogether
> > because all of our tests pass.
> 
> I could see arguments in both directions. I'd worry that by switching
> the default to "assume leak free", it may end up with misalignment
> between who introduces the bug and who deals with the fallout.
> 
> Right now, if I introduce a test that is leak free but don't mark it,
> somebody working on leaks later runs in check mode and says "yay, it
> passes. Let's mark it". It becomes their task to do, but it's an
> easy-ish task.
> 
> If we go the other way, then a new test that _does_ leak means that
> either:
> 
>   1. The original author notices the CI leaks job failing.
> 
>      a. They introduced the leak, and it was caught early. Yay!
> 
>      b. The leak is in some random part of Git that their test happened
> 	to trigger. Now they spend effort proving it was not their fault
> 	before they annotate the test with "does not pass leak".
> 
>   2. The original author does not notice. Somebody notices later when
>      doing leak-checking (or I guess just running their own CI, if we
>      are hitting these by default). Now they are stuck with doing (1a)
>      or (1b) themselves, even though they do not care about the original
>      topic.
> 
> So I dunno. If we think people are paying attention to CI on their
> topics, and we think that we are close enough to leak-free that (1b)
> won't come up a lot, it might make sense. I'm not quite sure we're there
> yet on the latter, but it's mostly gut feeling (and I know things have
> gotten a bit better recently, too).

I don't know either. Maybe it seems a bit early still considering the numbers we have:

   $ git grep -l PASSES_SANITIZE_LEAK=true t/t[0-9][0-9][0-9][0-9]-*.sh | wc -l
   678
   $ git grep -L PASSES_SANITIZE_LEAK=true t/t[0-9][0-9][0-9][0-9]-*.sh | wc -l
   329
BTW, perhaps we want to do this:
----- >8 --------- >8 --------- >8 --------- >8 ----
Subject: [PATCH] t: do not mark tests as no-leak-free

The mark TEST_PASSES_SANITIZE_LEAK=false and the absence of it mean the same thing: the test triggers leaks. However, explicitly declaring that the test leak, with TEST_PASSES_SANITIZE_LEAK=false, can suggest there is some special consideration for it, which is not the case.

Looking back at the history of the tests we're modifying in this patch, we see that both were marked as "leak-free", but later started triggering leaks and had to be re-marked accordingly as "no-leak-free". Instead of removing the mark entirely, it was changed to "false".

It doesn't seem to have much historical value to keep the mark for this reason, and removing it reduces the confusion that it has some special meaning.

Do it so.
Signed-off-by: Rubén Justo <rjusto@gmail.com>
---
 t/t0210-trace2-normal.sh | 1 -
 t/t0211-trace2-perf.sh   | 1 -
 2 files changed, 2 deletions(-)
Show changes to 2 files +0 −2

t/t0210-trace2-normal.sh, t/t0211-trace2-perf.sh

diff --git a/t/t0210-trace2-normal.sh b/t/t0210-trace2-normal.sh
index c312657a12..eff9a59dbd 100755
--- a/t/t0210-trace2-normal.sh
+++ b/t/t0210-trace2-normal.sh
@@ -2,7 +2,6 @@
 
 test_description='test trace2 facility (normal target)'
 
-TEST_PASSES_SANITIZE_LEAK=false
 . ./test-lib.sh
 
 # Turn off any inherited trace2 settings for this test.
diff --git a/t/t0211-trace2-perf.sh b/t/t0211-trace2-perf.sh
index 070fe7a5da..b9421a64a7 100755
--- a/t/t0211-trace2-perf.sh
+++ b/t/t0211-trace2-perf.sh
@@ -2,7 +2,6 @@
 
 test_description='test trace2 facility (perf target)'
 
-TEST_PASSES_SANITIZE_LEAK=false
 . ./test-lib.sh
 
 # Turn off any inherited trace2 settings for this test.
Patrick Steinhardt· Jul 24, 2024, 05:16 UTC · re: Rubén Justo · lore

Re: Re* [PATCH] t0613: mark as leak-free

On Wed, Jul 24, 2024 at 01:07:23AM +0200, Rubén Justo wrote:
Show 15 quoted lines
> On Tue, Jul 23, 2024 at 05:03:39PM -0400, Jeff King wrote:
> > On Mon, Jul 22, 2024 at 11:02:24AM +0200, Patrick Steinhardt wrote:
> > So I dunno. If we think people are paying attention to CI on their
> > topics, and we think that we are close enough to leak-free that (1b)
> > won't come up a lot, it might make sense. I'm not quite sure we're there
> > yet on the latter, but it's mostly gut feeling (and I know things have
> > gotten a bit better recently, too).
> 
> I don't know either.  Maybe it seems a bit early still considering the
> numbers we have: 
> 
>    $ git grep -l PASSES_SANITIZE_LEAK=true t/t[0-9][0-9][0-9][0-9]-*.sh | wc -l
>    678
>    $ git grep -L PASSES_SANITIZE_LEAK=true t/t[0-9][0-9][0-9][0-9]-*.sh | wc -l
>    329

These numbers aren't quite right -- you have to filter out most of the tests that include "lib-git-svn.sh", which reverses the schema and makes leak checks opt-out (?!). That brings me to the following hacky numbers:

    $ grep -l TEST_PASSES_SANITIZE_LEAK=true t[0-9][0-9][0-9][0-9]-*.sh | grep -v svn | wc -l
    678
    $ grep -L TEST_PASSES_SANITIZE_LEAK=true t[0-9][0-9][0-9][0-9]-*.sh | grep -v svn | wc -l
    261

I've got two local topic branches pending that reduce the number of failing tests even further. One is the Perforce series I've sent out yesterday. And then another random set of leak fixes. Which together bring us to:

    $ grep -l TEST_PASSES_SANITIZE_LEAK=true t[0-9][0-9][0-9][0-9]-*.sh | grep -v svn | wc -l
    749
    $ grep -L TEST_PASSES_SANITIZE_LEAK=true t[0-9][0-9][0-9][0-9]-*.sh | grep -v svn | wc -l
    190

So considering that it's currently still rather easy to make progress, I'd vote for keeping things as-is and wait for another couple of series to land before switching to opt-out.

Patrick
Rubén Justo· Jul 24, 2024, 06:45 UTC · re: Patrick Steinhardt · lore

Re: Re* [PATCH] t0613: mark as leak-free

On Wed, Jul 24, 2024 at 07:16:00AM +0200, Patrick Steinhardt wrote:
Show 20 quoted lines
> On Wed, Jul 24, 2024 at 01:07:23AM +0200, Rubén Justo wrote:
> > On Tue, Jul 23, 2024 at 05:03:39PM -0400, Jeff King wrote:
> > > On Mon, Jul 22, 2024 at 11:02:24AM +0200, Patrick Steinhardt wrote:
> > > So I dunno. If we think people are paying attention to CI on their
> > > topics, and we think that we are close enough to leak-free that (1b)
> > > won't come up a lot, it might make sense. I'm not quite sure we're there
> > > yet on the latter, but it's mostly gut feeling (and I know things have
> > > gotten a bit better recently, too).
> > 
> > I don't know either.  Maybe it seems a bit early still considering the
> > numbers we have: 
> > 
> >    $ git grep -l PASSES_SANITIZE_LEAK=true t/t[0-9][0-9][0-9][0-9]-*.sh | wc -l
> >    678
> >    $ git grep -L PASSES_SANITIZE_LEAK=true t/t[0-9][0-9][0-9][0-9]-*.sh | wc -l
> >    329
> 
> These numbers aren't quite right -- you have to filter out most of the
> tests that include "lib-git-svn.sh", which reverses the schema and makes
> leak checks opt-out (?!).
You are right.  
Show 6 quoted lines
> That brings me to the following hacky numbers:
> 
>     $ grep -l TEST_PASSES_SANITIZE_LEAK=true t[0-9][0-9][0-9][0-9]-*.sh | grep -v svn | wc -l
>     678
>     $ grep -L TEST_PASSES_SANITIZE_LEAK=true t[0-9][0-9][0-9][0-9]-*.sh | grep -v svn | wc -l
>     261
Out of curiosity, I ran this:
    $ echo $((329 - $(git grep -l lib-git-svn.sh t/t[0-9][0-9][0-9][0-9]-*.sh | wc -l)))
    260
which points to t9150-svk-mergetickets.sh.

← back to recent threads