3 comments

  • michalc 1 hour ago
    I think I can understand why this wasn’t addressed for so long: in the vast majority of cases if your db is exposed on a network level to untrusted sources, then you probably have far bigger problems?
    • pilif 2 minutes ago
      it's also very tricky to do given the current architecture on the server side where one single-threaded process handles the connection and uses (for all intents and purposes) sync io.

      In such a scenario, listening (and acting) on cancellation requests on the same connection becomes very hard, so fixing this goes way beyond "just".

  • rlpb 50 minutes ago
    TCP has an "urgent data" feature that might have been used for this kind of thing, used for Ctrl-C in telnet, etc. It can be used to bypass any pending send buffer and received by the server ahead of any unread data.
    • mike_hearn 4 minutes ago
      Fun fact: Oracle implements cancellation this way.

      The downside is that sometimes connections are proxied in ways that lose these unusual packets. Looking at you, Docker...

  • jtwaleson 2 hours ago
    From the title I was hoping for this being hacky on the server application side, like how it aborts and clears the memory for a running query.

    Still an interesting read. Just wondering, why can't the TCP connection of the query not be used to send a cancellation request? Why does it have the be out of band?

    • toast0 1 hour ago
      I don't know much about postgres, but as I understand it, it's a pretty standard server application. Read a request from the client, work on the request, send the result, read the next request.

      Changing that to poll for a cancellation while working is a big change. Also, the server would need to buffer any pipelined requests while looking for a cancellation request. A second connection is not without wrinkles, but it avoids a lot of network complexity.

    • CamouflagedKiwi 18 minutes ago
      It's basically got a thread per connection, while it's working on a query that thread isn't listening to incoming traffic on the network socket any more.
    • bob1029 1 hour ago
      MSSQL uses a special message over an existing connection:

      https://learn.microsoft.com/en-us/openspecs/windows_protocol...