[GODRIVER-1856] Load Balancer Support Created: 02/Feb/21  Updated: 28/Oct/23  Resolved: 29/Apr/21

Status: Closed
Project: Go Driver
Component/s: None
Affects Version/s: None
Fix Version/s: 1.6.0

Type: Epic Priority: Major - P3
Reporter: Esha Bhargava Assignee: Divjot Arora (Inactive)
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Issue split
Quarter: FY22Q2
Start date:
End date:
Calendar Time: 12 weeks, 3 days
Detailed Project Statuses:

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


 Description   
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.


Generated at Thu Feb 08 08:37:17 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.