Uploaded image for project: 'Couchbase .NET client library'
  1. Couchbase .NET client library
  2. NCBC-3489

Implement an in-flight operation limit to provide backpressure

    XMLWordPrintable

Details

    • Improvement
    • Resolution: Fixed
    • Major
    • 3.4.13
    • None
    • library
    • None
    • 0

    Description

      The current design allows a single connection from the connection pool to collect a large number of in-flight operations, rather than ensuring a more even spread of operations across connections in the pool.

      This can be detrimental when mixing small GET operations with large GET operations, as the small operation may be blocked waiting on the large operation to pass over the network socket. If the small operation were sent on another connection it may complete sooner. A more even spread of operations doesn't guarantee this will be the case, but does make it more likely.

      Additionally, when the connection pool is flooded with requests, for example for a batch operation, it tends to recover poorly. This is because many of the operations will timeout before they can complete but they have already been sent to the server. Therefore, these operations are still executed by the server and block other operations that were queued later. This effectively guarantees that the later operations will also timeout, even though they could have succeeded. If operations are instead queued on the client side and never sent if they timeout the SDK will recover better for later operations.

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            btburnett3 Brant Burnett
            btburnett3 Brant Burnett
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes

                PagerDuty