Skip to content

investigate flaky test-http2-respond-file-error-pipe-offset #35881

Description

@Trott
  • Test: test-http2-respond-file-error-pipe-offset
  • Platform: several (alpine-last-latest-x64, ubuntu1804_sharedlibs_debug, probably others)
  • Console Output:
not ok 1252 parallel/test-http2-respond-file-error-pipe-offset
  ---
  duration_ms: 0.298
  severity: fail
  exitcode: 1
  stack: |-
    node:assert:885
        throw newErr;
        ^
    
    AssertionError [ERR_ASSERTION]: ifError got unwanted exception: EPIPE: broken pipe, write
        at /home/iojs/build/workspace/node-test-commit-linux/nodes/alpine-last-latest-x64/test/common/index.js:340:12
        at /home/iojs/build/workspace/node-test-commit-linux/nodes/alpine-last-latest-x64/test/common/index.js:377:15
        at close (node:fs:1417:11)
        at FSReqCallback.oncomplete (node:fs:171:23)
     {
      generatedMessage: false,
      code: 'ERR_ASSERTION',
      actual: [Error: EPIPE: broken pipe, write] {
        errno: -32,
        code: 'EPIPE',
        syscall: 'write'
      },
      expected: null,
      operator: 'ifError'
    }
  ...

Activity

  1. added
    flaky-testIssues and PRs involving tests that fail intermittently in CI.
    on Oct 30, 2020
  2. Trott commented on Oct 30, 2020

    @Trott
    MemberAuthor

    https://ci.nodejs.org/job/node-test-commit-linux-containered/23143/nodes=ubuntu1804_sharedlibs_debug_x64/console

    test-joyent-ubuntu1804_sharedlibs_container-x64-4

    00:14:22 not ok 1292 parallel/test-http2-respond-file-error-pipe-offset
    00:14:22   ---
    00:14:22   duration_ms: 0.438
    00:14:22   severity: fail
    00:14:22   exitcode: 1
    00:14:22   stack: |-
    00:14:22     node:assert:885
    00:14:22         throw newErr;
    00:14:22         ^
    00:14:22     
    00:14:22     AssertionError [ERR_ASSERTION]: ifError got unwanted exception: EPIPE: broken pipe, write
    00:14:22         at /home/iojs/build/workspace/node-test-commit-linux-containered/test/common/index.js:340:12
    00:14:22         at /home/iojs/build/workspace/node-test-commit-linux-containered/test/common/index.js:377:15
    00:14:22         at close (node:fs:1417:11)
    00:14:22         at FSReqCallback.oncomplete (node:fs:171:23)
    00:14:22      {
    00:14:22       generatedMessage: false,
    00:14:22       code: 'ERR_ASSERTION',
    00:14:22       actual: [Error: EPIPE: broken pipe, write] {
    00:14:22         errno: -32,
    00:14:22         code: 'EPIPE',
    00:14:22         syscall: 'write'
    00:14:22       },
    00:14:22       expected: null,
    00:14:22       operator: 'ifError'
    00:14:22     }
    00:14:22   ...
    
  3. added
    http2Issues and PRs related to the http2 subsystem.
    on Oct 30, 2020
  4. Trott commented on Oct 30, 2020

    @Trott
    MemberAuthor

    /ping @addaleax

  5. Trott commented on Oct 30, 2020

    @Trott
    MemberAuthor

    /ping @tniessen Possibly a result of adding common.mustSucceed() recently? (Maybe that has uncovered a bug in the logic? Or maybe not. I'm doing a very superficial evaluation right now.)

  6. Trott commented on Oct 30, 2020

    @Trott
    MemberAuthor

    Here's another one.

    https://ci.nodejs.org/job/node-test-commit-plinux/35704/nodes=centos7-ppcle/console
    test-osuosl-centos7-ppc64_le-2

    00:08:00 not ok 1416 parallel/test-http2-respond-file-error-pipe-offset
    00:08:00   ---
    00:08:00   duration_ms: 0.146
    00:08:00   severity: fail
    00:08:00   exitcode: 1
    00:08:00   stack: |-
    00:08:00     node:assert:885
    00:08:00         throw newErr;
    00:08:00         ^
    00:08:00     
    00:08:00     AssertionError [ERR_ASSERTION]: ifError got unwanted exception: EPIPE: broken pipe, write
    00:08:00         at /home/iojs/build/workspace/node-test-commit-plinux/nodes/centos7-ppcle/test/common/index.js:340:12
    00:08:00         at /home/iojs/build/workspace/node-test-commit-plinux/nodes/centos7-ppcle/test/common/index.js:377:15
    00:08:00         at close (node:fs:1417:11)
    00:08:00         at FSReqCallback.oncomplete (node:fs:171:23)
    00:08:00      {
    00:08:00       generatedMessage: false,
    00:08:00       code: 'ERR_ASSERTION',
    00:08:00       actual: [Error: EPIPE: broken pipe, write] {
    00:08:00         errno: -32,
    00:08:00         code: 'EPIPE',
    00:08:00         syscall: 'write'
    00:08:00       },
    00:08:00       expected: null,
    00:08:00       operator: 'ifError'
    00:08:00     }
    00:08:00   ...
    
  7. Trott commented on Oct 30, 2020

    @Trott
    MemberAuthor

    Last one for now.

    https://ci.nodejs.org/job/node-test-commit-linuxone/23764/nodes=rhel7-s390x/consoleText
    test-ibm-rhel7-s390x-4

    not ok 1241 parallel/test-http2-respond-file-error-pipe-offset
      ---
      duration_ms: 0.67
      severity: fail
      exitcode: 1
      stack: |-
        node:assert:885
            throw newErr;
            ^
        
        AssertionError [ERR_ASSERTION]: ifError got unwanted exception: EPIPE: broken pipe, write
            at /home/iojs/build/workspace/node-test-commit-linuxone/nodes/rhel7-s390x/test/common/index.js:340:12
            at /home/iojs/build/workspace/node-test-commit-linuxone/nodes/rhel7-s390x/test/common/index.js:377:15
            at close (node:fs:1417:11)
            at FSReqCallback.oncomplete (node:fs:171:23)
         {
          generatedMessage: false,
          code: 'ERR_ASSERTION',
          actual: [Error: EPIPE: broken pipe, write] {
            errno: -32,
            code: 'EPIPE',
            syscall: 'write'
          },
          expected: null,
          operator: 'ifError'
        }
      ...
    
  8. tniessen commented on Oct 30, 2020

    @tniessen
    Member

    /ping @tniessen Possibly a result of adding common.mustSucceed() recently? (Maybe that has uncovered a bug in the logic? Or maybe not. I'm doing a very superficial evaluation right now.)

    @Trott Good question! When I updated this test, I assumed the call to writeFile is expected to succeed, which doesn't always seem to be the case. The previous mustCall() callback simply ignored the error.

    1. If this error is expected to never occur, then switching to mustSucceed has uncovered a bug and we should investigate why this error occurs.
    2. If this error is expected to occur sometimes, we need to switch back to mustCall(), but should add an explaining comment and an assertion regarding the type/code of the error.
    3. If this error is expected to always occur, the test case should assert that it does.
  9. Trott commented on Nov 21, 2020

    @Trott
    MemberAuthor
    • If this error is expected to never occur, then switching to mustSucceed has uncovered a bug and we should investigate why this error occurs.
    • If this error is expected to occur sometimes, we need to switch back to mustCall(), but should add an explaining comment and an assertion regarding the type/code of the error.
    • If this error is expected to always occur, the test case should assert that it does.

    @addaleax Do you have any insight as to whether the error here should be expected to occur sometimes and can be ignored or not?

  10. Trott commented on Nov 21, 2020

    @Trott
    MemberAuthor

    https://ci.nodejs.org/job/node-test-commit-linux/38406/nodes=alpine-latest-x64/consoleText

    not ok 1267 parallel/test-http2-respond-file-error-pipe-offset # TODO : Fix flaky test
      ---
      duration_ms: 0.224
      severity: flaky
      exitcode: 1
      stack: |-
        node:assert:885
            throw newErr;
            ^
        
        AssertionError [ERR_ASSERTION]: ifError got unwanted exception: EPIPE: broken pipe, write
            at /home/iojs/build/workspace/node-test-commit-linux/nodes/alpine-latest-x64/test/common/index.js:340:12
            at /home/iojs/build/workspace/node-test-commit-linux/nodes/alpine-latest-x64/test/common/index.js:377:15
            at close (node:fs:1452:11)
            at FSReqCallback.oncomplete (node:fs:180:23)
         {
          generatedMessage: false,
          code: 'ERR_ASSERTION',
          actual: [Error: EPIPE: broken pipe, write] {
            errno: -32,
            code: 'EPIPE',
            syscall: 'write'
          },
          expected: null,
          operator: 'ifError'
        }
      ...
    
  11. Trott commented on Nov 28, 2020

    @Trott
    MemberAuthor

    https://ci.nodejs.org/job/node-test-commit-linux/nodes=alpine-latest-x64/38508/consoleText

    not ok 1267 parallel/test-http2-respond-file-error-pipe-offset # TODO : Fix flaky test
      ---
      duration_ms: 0.153
      severity: flaky
      exitcode: 1
      stack: |-
        node:assert:900
            throw newErr;
            ^
        
        AssertionError [ERR_ASSERTION]: ifError got unwanted exception: EPIPE: broken pipe, write
            at /home/iojs/build/workspace/node-test-commit-linux/nodes/alpine-latest-x64/test/common/index.js:340:12
            at /home/iojs/build/workspace/node-test-commit-linux/nodes/alpine-latest-x64/test/common/index.js:377:15
            at close (node:fs:1459:11)
            at FSReqCallback.oncomplete (node:fs:187:23)
         {
          generatedMessage: false,
          code: 'ERR_ASSERTION',
          actual: [Error: EPIPE: broken pipe, write] {
            errno: -32,
            code: 'EPIPE',
            syscall: 'write'
          },
          expected: null,
          operator: 'ifError'
        }
      ...
    
  12. 1 remaining item

  13. Trott commented on Nov 28, 2020

    @Trott
    MemberAuthor

    Because the test is sensitive to resources (based on #35881 (comment)) and it seems to be failing on the low-resource Alpine Linux, possible solutions (assuming the failure is expected in those situations) might be skip the test on low-resource machines or the dreaded move-to-sequential.

  14. Trott commented on Nov 28, 2020

    @Trott
    MemberAuthor

    I think the situation we're in is this:

    If this error is expected to occur sometimes, we need to switch back to mustCall(), but should add an explaining comment and an assertion regarding the type/code of the error.

    It's possible for the reading end of the pipe to get the expected error
    and break everything down before we're finished, so allow EPIPE but
    no other errors.

    Proposed fix: #36305

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    flaky-testIssues and PRs involving tests that fail intermittently in CI.http2Issues and PRs related to the http2 subsystem.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions