Uploaded image for project: 'Go Driver'
  1. Go Driver
  2. GODRIVER-1856

Load Balancer Support

    • Type: Icon: Epic Epic
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • 1.6.0
    • Affects Version/s: None
    • Component/s: None
    • None
    • Done
    • Load Balancer Support
    • Hide

      Engineer(s): Divjot

      Summary: Support mongos instances behind a load balancer. This would require at least cursor / socket affinity and transaction / socket affinity so getMore and transactional operations always hit the same mongos instance.

      Cost in Eng Weeks: 4 Original | 7 To Date | 9 Est Final

      2021-04-20: Maintaining target end date of 2021-04-30

      • Waiting for reviews on first testing PR (small refactor of events storage)
      • Second testing PR will contain unified test runner changes and will be up for review soon
      • Divjot is also working on DRIVERS-1655 which is needed to ensure that drivers unpin on all abortTransaction attempts, successful and failed

      2021-04-06: Updated target end date to 2021-04-30

      • Currently working on updating connection pinning for transactions spec tests
      • DRIVERS-1638 probably needs to be done before updating the spec tests to make sure drivers behave correctly for existing server pinning behavior before adding in connection pinning. Divjot is working with the review crew and Shane to figure it out
      • Once the above work is complete, Divjot will make the changes to the Go implementation

      2021-03-23: Maintaining target end date of 2021-04-02

      • The last two Go PRs are up! Also put up two spec PRs to add tests
      • There was some contention around one of the proposed test format changes so Divjot is going to be spending the next day or so working through that and will POC a separate approach in Go
      • The spec crew is considering moving forward with testing using the serverId local hack to avoid being blocked on server-side support, but Durran will be working on that so the Go implementation will be kinda blocked once the test format change is done

      2021-03-09: Updated target end date to 2021-04-02

      • Divjot currently has 3 PRs in code review. Future PRs are blocked on the existing ones. All of these should hopefully wrap up by 3/19
      • Divjot and Durran and working together on testing this project and there are a bunch of unknowns. Adding two weeks for syncing spec tests and reviewing the spec PR though this should not take 100% of Divjot's time

      2021-02-23: Updated target end date to 2021-03-19

      • Completed pinning transactions to a connection
      • Implemented the finalized SDAM behavior (no monitoring/RTT threads, publish a "mocked" set of pre-determined SDAM events)
      • Implemented new SDAM error handling behavior to only clear connections with matching server IDs when a pool is cleared
      • Included connection pool stats in wait queue timeout errors
      • Wrote a bunch of integration tests to test the features locally. There's no upstream service (e.g. mongos, serverless proxy) that currently supports being deployed behind a load balancer, so the scope of integration tests is unknown
      • Divjot will put up individual PRs for review next week. Adding two more weeks for reviews and testing

      2021-02-09: Initial target end date of 2021-03-05

      • Worked on supporting a load balanced URI option, adding new LoadBalanced TopologyType and disabling monitoring routines for LB mode (this behavior might change based on discussions in the spec), command monitoring API updates to expose serverId in events and pin cursors to a connection last week
      • Currently working on pinning transactions to a connection which requires a big chunk of refactoring because otherwise it would create an import cycle, which isn't allowed in Go
      • Error handling is up next

      Show
      Engineer(s): Divjot Summary: Support mongos instances behind a load balancer. This would require at least cursor / socket affinity and transaction / socket affinity so getMore and transactional operations always hit the same mongos instance. Cost in Eng Weeks: 4 Original | 7 To Date | 9 Est Final 2021-04-20: Maintaining target end date of 2021-04-30 Waiting for reviews on first testing PR (small refactor of events storage) Second testing PR will contain unified test runner changes and will be up for review soon Divjot is also working on DRIVERS-1655 which is needed to ensure that drivers unpin on all abortTransaction attempts, successful and failed 2021-04-06: Updated target end date to 2021-04-30 Currently working on updating connection pinning for transactions spec tests DRIVERS-1638 probably needs to be done before updating the spec tests to make sure drivers behave correctly for existing server pinning behavior before adding in connection pinning. Divjot is working with the review crew and Shane to figure it out Once the above work is complete, Divjot will make the changes to the Go implementation 2021-03-23: Maintaining target end date of 2021-04-02 The last two Go PRs are up! Also put up two spec PRs to add tests There was some contention around one of the proposed test format changes so Divjot is going to be spending the next day or so working through that and will POC a separate approach in Go The spec crew is considering moving forward with testing using the serverId local hack to avoid being blocked on server-side support, but Durran will be working on that so the Go implementation will be kinda blocked once the test format change is done 2021-03-09: Updated target end date to 2021-04-02 Divjot currently has 3 PRs in code review. Future PRs are blocked on the existing ones. All of these should hopefully wrap up by 3/19 Divjot and Durran and working together on testing this project and there are a bunch of unknowns. Adding two weeks for syncing spec tests and reviewing the spec PR though this should not take 100% of Divjot's time 2021-02-23: Updated target end date to 2021-03-19 Completed pinning transactions to a connection Implemented the finalized SDAM behavior (no monitoring/RTT threads, publish a "mocked" set of pre-determined SDAM events) Implemented new SDAM error handling behavior to only clear connections with matching server IDs when a pool is cleared Included connection pool stats in wait queue timeout errors Wrote a bunch of integration tests to test the features locally. There's no upstream service (e.g. mongos, serverless proxy) that currently supports being deployed behind a load balancer, so the scope of integration tests is unknown Divjot will put up individual PRs for review next week. Adding two more weeks for reviews and testing 2021-02-09: Initial target end date of 2021-03-05 Worked on supporting a load balanced URI option, adding new LoadBalanced TopologyType and disabling monitoring routines for LB mode (this behavior might change based on discussions in the spec), command monitoring API updates to expose serverId in events and pin cursors to a connection last week Currently working on pinning transactions to a connection which requires a big chunk of refactoring because otherwise it would create an import cycle, which isn't allowed in Go Error handling is up next

      Epic Summary

      Summary
      Support mongos instances behind a load balancer. This would require at least cursor / socket affinity and transaction / socket affinity so getMore and transactional operations always hit the same mongos instance.

            Assignee:
            divjot.arora@mongodb.com Divjot Arora (Inactive)
            Reporter:
            esha.bhargava@mongodb.com Esha Bhargava
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:
              12 weeks, 3 days