Skip to content

Fix flaky hardlinks test#737

Merged
tridge merged 1 commit intoRsyncProject:masterfrom
elboulangero:fix-flaky-hardlinks-test-2
Aug 23, 2025
Merged

Fix flaky hardlinks test#737
tridge merged 1 commit intoRsyncProject:masterfrom
elboulangero:fix-flaky-hardlinks-test-2

Conversation

@elboulangero
Copy link
Copy Markdown
Contributor

The test was added in dc34990, it turns out that it's flaky. It failed once on the Debian build infra, cf. 1.

The problem is that the command rsync -aH '$fromdir/sym' '$todir' updates the mod time of $todir, so there might be a diff between the output of rsync_ls_lR $fromdir and rsync_ls_lR $todir, if ever rsync runs 1 second (or more) after the directories were created.

To clarify: it's easy to make the test fails 100% of the times with this change:

 makepath "$fromdir/sym" "$todir"
+sleep 5
 checkit "$RSYNC -aH '$fromdir/sym' '$todir'" "$fromdir" "$todir"

With the fix proposed here, we don't use checkit anymore, instead we just run the rsync command, then a simple diff to compare the two directories. This is exactly what the other -H test just above does.

In case there's some doubts, diff fails if sym is missing:

$ mkdir -p foo/sym bar
$ diff foo bar || echo KO!
Only in foo: sym
KO!

I tested that, after this commit, the test still catches the -H regression in rsync 3.4.0.

Fixes: #735

The test was added in dc34990, it turns out that it's flaky. It failed
once on the Debian build infra, cf. [1].

The problem is that the command `rsync -aH '$fromdir/sym' '$todir'`
updates the mod time of `$todir`, so there might be a diff between the
output of `rsync_ls_lR $fromdir` and `rsync_ls_lR $todir`, if ever rsync
runs 1 second (or more) after the directories were created.

To clarify: it's easy to make the test fails 100% of the times with this
change:

```
 makepath "$fromdir/sym" "$todir"
+sleep 5
 checkit "$RSYNC -aH '$fromdir/sym' '$todir'" "$fromdir" "$todir"
```

With the fix proposed here, we don't use `checkit` anymore, instead we
just run the rsync command, then a simple `diff` to compare the two
directories. This is exactly what the other `-H` test just above does.

In case there's some doubts, `diff` fails if `sym` is missing:

```
$ mkdir -p foo/sym bar
$ diff foo bar || echo KO!
Only in foo: sym
KO!
```

I tested that, after this commit, the test still catches the `-H`
regression in rsync 3.4.0.

Fixes: RsyncProject#735

[1]: https://buildd.debian.org/status/fetch.php?pkg=rsync&arch=ppc64el&ver=3.4.1%2Bds1-1&stamp=1741147156&raw=0
@tridge tridge force-pushed the fix-flaky-hardlinks-test-2 branch from 9f31dde to 90b745e Compare August 23, 2025 07:01
@tridge tridge requested a review from Copilot August 23, 2025 07:01
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR fixes a flaky test in the hardlinks test suite that was causing intermittent failures on the Debian build infrastructure. The test was failing due to timing issues where rsync could update the modification time of the target directory, causing differences between source and destination when compared using rsync_ls_lR.

Key changes:

  • Replace checkit function call with direct rsync command execution
  • Add explicit diff comparison between source and destination directories
  • Align the test approach with other hardlink tests in the same file

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@tridge tridge merged commit d941807 into RsyncProject:master Aug 23, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

New hardlinks test failed - false positive?

3 participants