Monitor heartbeat retry can leave in-use connections hanging for minutes

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Unresolved
    • Priority: Unknown
    • None
    • Affects Version/s: 2.6.1
    • Component/s: CMAP, Handshake, SDAM
    • None
    • None
    • Go Drivers
    • Hide

      1. What would you like to communicate to the user about this feature?
      2. Would you like the user to see examples of the syntax and/or executable code and its output?
      3. Which versions of the driver/connector does this apply to?

      Show
      1. What would you like to communicate to the user about this feature? 2. Would you like the user to see examples of the syntax and/or executable code and its output? 3. Which versions of the driver/connector does this apply to?
    • None
    • None
    • None
    • None
    • None
    • None

      Context of when and why the failure occurred:

      The CMAP spec requires interrupting in-use connections on a monitor timeout because otherwise a dead connection’s response time can block for the OS’s TCP retransmission timeout, and only a socket timeout and interruptInUseConnections can abort.

      Stack trace:

      N/A

      Detailed steps to reproduce the problem?

      1. SDAM dedication connection is connection B; Cursor blocks on getMore for connection A
      2. The network breaks all existing connection but new connections still work, e.g. LB4 failover
      3. Heartbeat on B times out, closes
      4. Monitor creates connection C, retry concludes healthy, no clear / interupt
      5. Nothing interrupts A and it waits minutes for the TCP transmission / socket timeout

      Definition of done: what must be done to consider the task complete?

      Clear with interruptInUseConnections=true on the first monitor timeout (resolve the GODRIVER-2577 delay) without reintroducing the FaaS regression (see comments).

      Unskip these tests:

      TestUnifiedSpec/server-discovery-and-monitoring/tests/unified/interruptInUse-pool-clear.json/Connection_pool_clear_uses_interruptInUseConnections=true_after_monitor_timeout
      TestUnifiedSpec/server-discovery-and-monitoring/tests/unified/interruptInUse-pool-clear.json/Error_returned_from_connection_pool_clear_with_interruptInUseConnections=true_is_retryable
      TestUnifiedSpec/server-discovery-and-monitoring/tests/unified/interruptInUse-pool-clear.json/Error_returned_from_connection_pool_clear_with_interruptInUseConnections=true_is_retryable_for_write
      

      The exact Go version used, with patch level:

      N/A

      The exact version of the Go driver used:

      N/A

      Describe how MongoDB is set up. Local vs Hosted, version, topology, load balanced, etc.

      N/A

      The operating system and version (e.g. Windows 7, OSX 10.8, ...)

      N/A

      Security Vulnerabilities

      N/A

            Assignee:
            Unassigned
            Reporter:
            Qingyang Hu
            None
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: