Skip to content
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

[v6.x backport] node internals' postmortem metadata (#14901, #18530, #18653) #19323

Closed

Conversation

mmarchini
Copy link
Contributor

Backport of #14901, #18530 and #18653 to v6.x.

I had some problems to backporting the tests, and I'm not sure if the current changes on test/cctest/node_test_fixture.h are the best approach for v6.x. If someone could review the changes in this file I'd really appreciate.

Checklist
  • make -j4 test (UNIX), or vcbuild test (Windows) passes
  • tests and/or benchmarks are included
  • documentation is changed or added
  • commit message follows commit guidelines

Matheus Marchini and others added 3 commits March 13, 2018 12:53
Before these changes, only V8 added postmortem metadata to Node's
binary, limiting the possibilities for debugger's developers to add some
features that rely on investigating Node's internal structures.

These changes are first steps towards empowering debug tools to
navigate Node's internal structures. One example of what can be
achieved with this is shown at nodejs/llnode#122 (a command which prints
information about handles and requests on the queue for a core dump
file). Node postmortem metadata are prefixed with nodedbg_.

This also adds tests to validate if all postmortem metadata are
calculated correctly, plus some documentation on what is postmortem
metadata and a few care to be taken to avoid breaking it.

Ref: nodejs/llnode#122
Ref: nodejs/post-mortem#46

PR-URL: nodejs#14901
Refs: nodejs/post-mortem#46
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
PR-URL: nodejs#18530
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Redefining private breaks any private inheritance in the
included files. We can simply declare GenDebugSymbols()
as friends in related classes to gain the access that we need.

PR-URL: nodejs#18653
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
@nodejs-github-bot nodejs-github-bot added c++ Issues and PRs that require attention from people who are familiar with C++. lib / src Issues and PRs related to general changes in the lib or src directory. v6.x labels Mar 13, 2018
@mmarchini
Copy link
Contributor Author

@mmarchini mmarchini added the wip Issues and PRs that are still a work in progress. label Mar 13, 2018
@mmarchini
Copy link
Contributor Author

Failures are related. I'll take a look at it later.

@joaocgreis
Copy link
Member

I aborted a node-test-binary-windows that had been running for 8 hours, apparently just stuck on cctest. This might also be related. Since there are other failures I will not restart the job now.

@MylesBorins MylesBorins added the semver-minor PRs that contain new features and should be released in the next minor version. label Mar 20, 2018
@MylesBorins
Copy link
Contributor

If we wanted to land this it should come as semver-minor. unsure if we want to do another minor before v6.x goes into maintenance mode

/cc @nodejs/lts

@joyeecheung
Copy link
Member

@MylesBorins My opinion would be yes, it's worth it. This helps diagnose various kinds of bugs in v6.x should there be any when it's in maintenance mode.

@mmarchini
Copy link
Contributor Author

I agree with @joyeecheung.

Regarding the failing tests: test/cctest/test_node_postmortem_metadata.cc was heavily inspired on test/cctest/test_environment.cc and it uses the EnvironmentTestFixture (which was created for test_environment.cc). There's no test_environment.cc in v6.x, and I'm having a hard time backporting EnvironmentTestFixture to v6.x. If anyone have some I would really appreciate: https://github.com/mmarchini/node/blob/c7040a17af9f25dbc967bad9c2ad71da34387ff8/test/cctest/node_test_fixture.h#L64-L144

Alternatively, we could remove tests for this or write simpler ones in v6.x:

TEST_F(DebugSymbolsTest, BaseObjectPersistentHandle) {
  EXPECT_EQ(nodedbg_offset_BaseObject__persistent_handle___v8_Persistent_v8_Object,
            OffsetOf(&BaseObject::persistent_handle_));
}

FWIW the metadata is working on nodejs/llnode#122 (Demo: https://asciinema.org/a/qgfHneUACrD0iGXwmFc37rXC4)

@gibfahn
Copy link
Member

gibfahn commented Mar 22, 2018

If we wanted to land this it should come as semver-minor. unsure if we want to do another minor before v6.x goes into maintenance mode

If we're going to consider this we should look at all the possible minors and make a decision based on that. We did a minor quite recently (Feb 13th), and we don't want to do a minor after we go into maintenance if we can avoid it, so we'd need to make the decision quite quickly.

I'm thinking an issue in nodejs/Release, and a Release meeting in the next week or two would be good.

@MylesBorins
Copy link
Contributor

MylesBorins commented Mar 23, 2018 via email

@MylesBorins MylesBorins force-pushed the v6.x-staging branch 2 times, most recently from 0a4c79b to 988cca8 Compare March 30, 2018 03:28
@MylesBorins
Copy link
Contributor

It is not looking like we are going to be doing another feature related minor on 6.x. Should we close this?

@mmarchini
Copy link
Contributor Author

No problem, I'll close this then.

@mmarchini mmarchini closed this Apr 12, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c++ Issues and PRs that require attention from people who are familiar with C++. lib / src Issues and PRs related to general changes in the lib or src directory. semver-minor PRs that contain new features and should be released in the next minor version. wip Issues and PRs that are still a work in progress.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants