Skip to content

Conversation

@jwhitlock
Copy link
Contributor

@jwhitlock jwhitlock commented Jan 28, 2022

Update Node.js from 14.17.15 to 16.13.2, the LTS version until 2022-10-18.

This was originally part of PR #5084, where it failed on the docker-worker-chunk-X steps. These (mostly) pass after updating the worker-ci image from Ubuntu 14.04 to 20.04, which also includes:

  • Updating from Docker 18.06.3 to 20.10.12
  • Implementing a new method for registering the Docker package repo
  • Switch from GZip to the XZ-compressed Node.js package

@jwhitlock jwhitlock requested a review from a team as a code owner January 28, 2022 01:08
@jwhitlock jwhitlock requested review from lotas and petemoore January 28, 2022 01:08
@jwhitlock jwhitlock marked this pull request as draft January 28, 2022 01:08
@jwhitlock jwhitlock force-pushed the node-16.13.2 branch 2 times, most recently from ccf1b3d to dc9bc02 Compare January 28, 2022 01:17
@jwhitlock
Copy link
Contributor Author

This is a new one - I haven't seen the decision task fail before. We did recently update it to get the Python 3 version. I'll try again in the morning.

@jwhitlock
Copy link
Contributor Author

Ah, found it - a poorly encoded special quote character in the commit message:

> change in behavior, and it’s still possible to switch modes using the

This showed up as the byte sequence \xe2\x80\x99. I changed it to:

> change in behavior, and it's still possible to switch modes using the

@jwhitlock
Copy link
Contributor Author

I added a commit that updates the worker-ci image to Ubuntu 20.04, and I've pushed the new image to the node16.13.2 tag (which continues to be used by just these node update PRs). 4 of the 5 docker-worker-chunk-X tests passed, and docker-worker-chunk-2 had one failing test, the cat stress test:

test('cat stress test', async () => {

I'm trying again (making a small change to the commit message and force pushing), since it looks like it is sensitive to timing.

Copy link
Contributor

@lotas lotas left a comment

Choose a reason for hiding this comment

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

👍

@jwhitlock
Copy link
Contributor Author

The same test failed on a re-run, so I think this is a real regression. I find it very challenging to determine what is happening in the build step. I'm inclined to disable the test and work on it in a new PR, since everything else is working. However, this could be demonstrating something in Node 16.12.2, or Ubuntu 20.04, that will impact other CI jobs.

I think my next attempt will be to add a new CI step that just runs this test, to help with debugging and remove other distractions. I'll work on that Monday.

@jwhitlock jwhitlock force-pushed the node-16.13.2 branch 3 times, most recently from 0586bee to bd69216 Compare January 31, 2022 22:52
@jwhitlock
Copy link
Contributor Author

Made some progress.

The test is waiting forever on this line:

await new Promise(accept => client.stdout.on('end', accept));

I noticed that this test was similar but different from one labelled "cat". Most importantly, this is the only test that uses DockerExecClient from docker-exec-websocket-client. Which is a SysEng project - https://github.com/taskcluster/docker-exec-websocket-client. All the tests in that project pass on Node.JS v14.17.5, but one fails on v16.13.2. AND, I can run those tests locally rather than push to community-ci.

I filed taskcluster/docker-exec-websocket-client#1, and will try to get that working.

@jwhitlock
Copy link
Contributor Author

jwhitlock commented Feb 4, 2022

After a lot of work, I found and fixed an issue in taskcluster/docker-exec-websocket-server#35. A few steps are needed:

  • Review and merge docker-exec-websocket-server PR 35
  • Release a new version of docker-exec-websocket-server
  • Update Refresh codebase, use Taskcluster CI docker-exec-websocket-client#2 to use that version, get passing tests
  • Review and merge docker-exec-websocket-client PR 2
  • Release a new version of docker-exec-websocket-client
  • Rebase and update this PR to use both, get tests to pass

@jwhitlock
Copy link
Contributor Author

With the 3.0.0 versions of docker-exec-websocket-client and docker-exec-websocket-server, the cat stress test is still failing, but no longer stuck waiting for the Promise. Now it is failing because the output does not match the input. I'll debug in the morning.

From the release notes:

> As of Node.js 15, the default mode for `unhandledRejection` is changed
> to `throw` (from `warn`). In throw mode, if an `unhandledRejection`
> hook is not set, the `unhandledRejection` is raised as an uncaught
> exception. Users that have an `unhandledRejection` hook should see no
> change in behavior, and it's still possible to switch modes using the
> `--unhandled-rejections=mode` process flag.

The Node.js 14 behaviour is available with `--unhandled-rejections=warn`
Updating from 14.04 to 20.04, the current LTS version. This includes:

* Updating from Docker 18.06.3 to 20.10.12
* Implementing a new method for registering the Docker package repo
* Switch from GZip to the XZ-compressed Node.js package
@jwhitlock
Copy link
Contributor Author

As discussed at #5154 (comment), the problem was that the output does match the input, but it didn't before... The test now passes under Node v14, and this is rebased to include the docker-exec-websocket-* libraries and the corrected test.

@jwhitlock jwhitlock marked this pull request as ready for review February 8, 2022 22:40
@jwhitlock
Copy link
Contributor Author

So far one error that looks like an intermittent. In service-secrets, the tests passed, but failed to upload the coverage report:

[taskcluster:error] Error uploading "public/coverage-final.json" artifact. getaddrinfo EAI_AGAIN community-tc.services.mozilla.com

I could re-run, but I think its ready to merge.

@jwhitlock jwhitlock requested a review from lotas February 8, 2022 22:43
Copy link
Contributor

@matt-boris matt-boris left a comment

Choose a reason for hiding this comment

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

LG(reat)TM! Thanks John for this huge effort right as you're transitioning off the team. This is awesome. 👏🏻 🎉

@matt-boris
Copy link
Contributor

Lol v16.14.0 was just released 😂

@jwhitlock
Copy link
Contributor Author

The diff doesn't show that there was a huge effort, which is how it should be for most Node updates. I hope the 16.14.0 is just a matter of following the docs!

@jwhitlock jwhitlock merged commit 4f8e697 into main Feb 8, 2022
@jwhitlock jwhitlock deleted the node-16.13.2 branch February 8, 2022 22:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants