Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-123345

Qt GRPC HTTP2 regression

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P1: Critical
    • 6.7.0, 6.7.1, 6.8.0 FF
    • 6.7.0 RC
    • GRPC, Network: HTTP
    • None
    • Fedora 39, Qt 6.7.0 RC from online installer
    • All
    • 446cde4b1 (6.7.0), 2f6d6ea3d (6.7), 0520f2288 (dev)

    Description

      Summary

      My Qt 6.6 GRPC client can connect and talk to my Rust GRPC server.

      My Qt 6.7 GRPC client can not connect and talk to my Rust GRPC server.

       

      The logs below show that my server does not receive a `END_STREAM` from the Qt 6.7 client request which I think is relevant.

      I tried to upgrade to Qt 6.7 because I want bidirectional streams. Unfortunately, there seems to be a regression which completely breaks my Qt GRPC client.

      I highly suspect it's related to:

      QTBUG-105493

       

      My test client is basically based on the chat example and talks to a Rust tonic GRPC server.

       

      Http debug logs from my server

      It seems suspicious that the logs from the Qt 6.7 client request do not include a `END_STREAM` message. Maybe that's a clue?

       

      Qt 6.6 (OK)

      ```

      2024-03-15T01:11:41.647195Z DEBUG h2::codec::framed_write: send frame=Settings { flags: (0x0), initial_window_size: 1048576, max_frame_size: 16384, max_header_list_size: 16777216 }
      2024-03-15T01:11:41.647973Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=Settings { flags: (0x0), enable_push: 0, initial_window_size: 214748364 }
      2024-03-15T01:11:41.648122Z DEBUG Connection{peer=Server}: h2::codec::framed_write: send frame=Settings { flags: (0x1: ACK) }
      2024-03-15T01:11:41.648245Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=WindowUpdate { stream_id: StreamId(0), size_increment: 2147418112 }
      2024-03-15T01:11:41.654009Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=Headers { stream_id: StreamId(1), flags: (0x24: END_HEADERS | PRIORITY), stream_dep: StreamDependency

      { dependency_id: StreamId(0), weight: 127, is_exclusive: false }

      }
      2024-03-15T01:11:41.654479Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=Settings { flags: (0x1: ACK) }
      2024-03-15T01:11:41.654580Z DEBUG Connection{peer=Server}: h2::proto::settings: received settings ACK; applying Settings { flags: (0x0), initial_window_size: 1048576, max_frame_size: 16384, max_header_list_size: 16777216 }
      2024-03-15T01:11:41.654730Z DEBUG Connection{peer=Server}: h2::codec::framed_write: send frame=WindowUpdate { stream_id: StreamId(0), size_increment: 983041 }
      2024-03-15T01:11:41.701573Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }
      2024-03-15T01:11:41.701697Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1), flags: (0x1: END_STREAM) }

      2024-03-15T01:11:41.702108Z DEBUG Connection{peer=Server}: h2::codec::framed_write: send frame=Headers { stream_id: StreamId(1), flags: (0x4: END_HEADERS) }
      2024-03-15T01:11:41.702179Z DEBUG Connection{peer=Server}: h2::codec::framed_write: send frame=Data { stream_id: StreamId(1) }
      2024-03-15T01:11:41.702210Z DEBUG Connection{peer=Server}: h2::codec::framed_write: send frame=Headers { stream_id: StreamId(1), flags: (0x5: END_HEADERS | END_STREAM) }

      ```

       

      Qt 6.7 (BAD)

      ```

      2024-03-15T01:07:22.461568Z DEBUG h2::codec::framed_write: send frame=Settings { flags: (0x0), initial_window_size: 1048576, max_frame_size: 16384, max_header_list_size: 16777216 }
      2024-03-15T01:07:22.462011Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=Settings { flags: (0x0), enable_push: 0 }
      2024-03-15T01:07:22.462064Z DEBUG Connection{peer=Server}: h2::codec::framed_write: send frame=Settings { flags: (0x1: ACK) }
      2024-03-15T01:07:22.462082Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=Settings { flags: (0x1: ACK) }
      2024-03-15T01:07:22.462091Z DEBUG Connection{peer=Server}: h2::proto::settings: received settings ACK; applying Settings { flags: (0x0), initial_window_size: 1048576, max_frame_size: 16384, max_header_list_size: 16777216 }
      2024-03-15T01:07:22.462106Z DEBUG Connection{peer=Server}: h2::codec::framed_write: send frame=WindowUpdate { stream_id: StreamId(0), size_increment: 983041 }
      2024-03-15T01:07:23.626692Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=Headers { stream_id: StreamId(1), flags: (0x24: END_HEADERS | PRIORITY), stream_dep: StreamDependency

      { dependency_id: StreamId(0), weight: 127, is_exclusive: false }

      }
      2024-03-15T01:07:23.626939Z DEBUG Connection{peer=Server}: h2::codec::framed_read: received frame=Data { stream_id: StreamId(1) }

      ```

       

      Please let me know if you need more details. However, I think this should be trivial to reproduce.

       

       

      Attachments

        For Gerrit Dashboard: QTBUG-123345
        # Subject Branch Project Status CR V

        Activity

          People

            semlanik Alexey Edelev
            barrel user barrel
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes