Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-5025

Incomplete promise rejection

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 0.12.0
    • Fix Version/s: None
    • Component/s: Node.js - Library
    • Labels:
    • Flags:
      Important

      Description

      I have a problem while performing client requests created with HttpConnection.

      In case of some errors like 'ECONNREFUSED', 'Connection timed out' and some other errors http_connection emits an error, but nothing handles it, therefore promise does not reject and in fact just hangs, so we have memory leaks.

      Looks like promise can only be rejected only with a call of clientCallback
      https://github.com/apache/thrift/blob/41f47aff7ccc1a093eb5e48250377c1178babeec/lib/nodejs/lib/thrift/http_connection.js#L140

      As far as I did not find any example of such cases (multiplexer+http connection+node), it is possible that I use it in the wrong way, but from the source code perspective it looks like a design flaw, could you please take a look into this issue?

      Here is a simplified source code I use:

      const multiplexer = new Multiplexer();
      const connection = new HttpConnection({
            path: '/rpc',
            transport: TBufferedTransport,
            protocol: TBinaryProtocol,
            nodeOptions: {
                  host: '127.0.0.1',
                  port: 8989,
            },
      });
      
      const client = multiplexer.createClient(
            'UserClient',
            UserClient,
            connection
      );
      
      try {
            const user = await client.registerUser({
                  // Some props related to user
            } as any);
      
            // this only will be executed if registerUser performs without any errors.
            // perform some actions with response
      catch (error) { // this never happens in case of connection issues and some internal errors of http connection
            // log error 
      }
      

       

        Attachments

          Activity

          $i18n.getText('security.level.explanation', $currentSelection) Viewable by All Users
          Cancel

            People

            • Assignee:
              Unassigned
              Reporter:
              stas.sribnyi Stas Sribnyi

              Dates

              • Created:
                Updated:

                Issue deployment