-
Notifications
You must be signed in to change notification settings - Fork 30.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
test-fs-utimes failing locally #36591
Comments
FWIW I saw the same failure on RHEL 8. I don't see it on Fedora 33. |
@targos i would like to take this opportunity |
Sure, feel free to take it! |
hi @targos i installed cantos streams any ideas how to proceed? |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
@targos Does this still fail for you every time locally? If so, I might open a different issue for the CI failures as they seem to be different and trying to resolve both in one place may be confusing. |
Yes, it still fails everytime locally. I agree that the CI failures seem to be different. |
@targos I see the same failure on my local RHEL boxes. I'd done some investigation and even opened a Bugzilla to get help. I was particularly confused why our CENTOS system in the CI were fine, while my local instances failed. The answer was that not all file systems support Y2K38 (ie they will roll over versus being able to handle times beyond that point). Therefore,the test will fail if the file system used for the system does not support Y2K38 and that includes xfs which is the default for some RHEL/CENTOS installs. A quick google does not show an easy way to test what type the file system is, so I did not have a good idea of how to fix the test and then it got lost in my backlog. Don't have any ideas on how to address at this point, other than excluding the test which I'm not sure is the right answer. |
If that's the explanation, it's surprising that it's always off-by-one and not something bigger?
But if that's the explanation and this is not a bug (off by one second?), we can perhaps permit the off-by-one value as valid. That may also mean that perhaps we can add back in a bunch of the platforms that we skip: // Test Y2K38 for all platforms [except 'arm', 'OpenBSD', 'SunOS' and 'IBMi']
if (!process.arch.includes('arm') &&
!common.isOpenBSD && !common.isSunOS && !common.isIBMi) { |
Yeah, I don't know why it's like that, but the behavior is that any value greater than I found https://www.phoronix.com/scan.php?page=news_item&px=XFS-Linux-5.10 CentOS Stream has kernel version 4.18. |
I also don't understand how it could have worked before. The test started to fail when I upgraded from CentOS 8 to CentOS Stream. |
@targos is the same file system being used between the CentOS 8 and CentOS Stream installations ? |
@Trott I think allowing off by one is equivalent to disabling the test for a platform since the test sets the value to be 1 more than is possible on a non Y2K38 compliant system. I think the skip is a better indication that the test is not applicable for a platform versus allowing it to be one off. |
The problem with that approach is that we would need to skip all Linux tests just because it fails on one Linux host. I think the thing to do is allow the max - 1 value and keep the skip on those other platforms. |
I suppose so. I doubt that the switch from CentOS 8 to CentOS Stream could have changed the file system. |
@Trott I must be missing something if we "allow the max - 1" then the test will always pass, even in the case of a new failure.... |
@targos if its the same file system then I'm not sure how it ever worked too. |
@targos Can you run this code with a recent node and then run it again with something from the 8.x line or earlier and report the output?
|
|
@targos Hmmm... OK, so that makes me second-guess my "allow 2*31-1" suggested hack for the test. @mhdawson had previously comented:
I wonder, though, if that's the path we want to go down, at least for the POSIX-like operating systems. I would propose something like this:
Does that sound like a reasonable plan, @targos and @mhdawson? If so, I'll update #37707 to do something like that instead of what it's doing right now. Of course, all this assumes that the problem is file system type support for timestamps beyond 2038 and not something else. My naive and superficial reading of a few things suggests that ext2 and ext3 do not support Y2K38 but that ext4 does. We'll need to confirm that on CI and in a few other places. (Or someone who knows better can just tell me I'm wrong.) @targos, can you share the output of |
@Trott Maybe another solution would be to Adopting such a scheme could also allow us to drop some of the platform specific skips in favour of detecting errors from
|
@richardlau That sounds both simpler and more reliable than what I suggested. |
I like @richardlau suggestion as well. They key for me is that it checks if Y2K38 is supported using a test that does not depend on Node.js and then we only run the Node.js tests if we know from the os level check that it should be able to pass the tests. |
The issue I'm running into is that there's no guarantee that |
Hmmm...I wonder if I can use the date part of the output of |
EDIT: It works everywhere on CI except Windows (of course) and AIX. |
Move Y2K38-specific parts of test-fs-utimes to test-fs-utimes-y2K38.js. On non-Windows, check for Y2K38 support and skip if it is unsupported. Fixes: nodejs#36591
Resolves nodejs/node#36591, which is currently happening on 13-x-y
Resolves nodejs/node#36591, which is currently happening on 13-x-y
Linux 4.18.0-240.1.1.el8_3.x86_64 #1 SMP Thu Nov 19 17:20:08 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
What steps will reproduce the bug?
Run
node test/parallel/test-fs-utimes.js
How often does it reproduce? Is there a required condition?
Every time
What is the expected behavior?
The test should pass
What do you see instead?
Additional information
I recently updated to CentOS Stream, but I don't remember if it was already failing before that.
The text was updated successfully, but these errors were encountered: