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

Separate batching, retry, and single-operation execution logic

    • Type: Icon: Improvement Improvement
    • Resolution: Unresolved
    • Priority: Icon: Unknown Unknown
    • None
    • Affects Version/s: None
    • Component/s: Retryability
    • Labels:
      None

      Currently, all batching, retry, server and connection selection, single-operation execution, and error handling logic are part of the giant 500-line Operation.Execute function. That function is becoming unmaintainable as more and more logic is added to it (e.g. RTT short-circuit, memory buffer reuse, additional error handling, etc). Difficulty maintaining Operation.Execute has also contributed to several bugs (GODRIVER-2677, GODRIVER-2768) and Go driver version retractions (v1.11.0 - v1.11.2).

      Refactor Operation.Execute into functions and/or types with separate concerns. For example, it might make sense to create a function and/or type for each of:

      1. Batching
      2. Retry
      3. Single-operation execution

      Definition of done:

      • Split Operation.Execute into functions and/or types that separate at least batching, retry, and single-operation execution concerns.
      • Add tests that assert the behavior of each concern individually.

            Assignee:
            Unassigned Unassigned
            Reporter:
            matt.dale@mongodb.com Matt Dale
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: