[GODRIVER-1885] Client Side Operations Timeout Created: 11/Feb/21  Updated: 12/Jan/24  Resolved: 27/Oct/22

Status: Closed
Project: Go Driver
Component/s: Retryability
Affects Version/s: None
Fix Version/s: 1.10.0, 1.11.0

Type: Epic Priority: Major - P3
Reporter: Esha Bhargava Assignee: Benji Rewis (Inactive)
Resolution: Done Votes: 0
Labels: size-xlarge
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Documented
Duplicate
is duplicated by GODRIVER-1738 Client side operations Timeout Closed
Issue split
Related
is related to GODRIVER-1799 Avoiding connection storms Closed
is related to GODRIVER-2622 Stabilize CSOT Closed
Quarter: FY23Q2, FY23Q3
Upstream Changes Summary:

DRIVERS-555:
NA

Documentation Changes: Needed
Start date:
End date:
Calendar Time: 38 weeks, 1 day
Scope Cost Estimate: 9
Cost to Date: 26
Final Cost Estimate: 28
Cost Threshold %: 100
Detailed Project Statuses:

Engineer(s): Divjot Benji

Summary: Allow users to configure the timeout on operations by using a single timeout setting.

2022-10-18: Updating end date to 2022-11-04

Status update:

  • Working on remaining prose tests.
  • Working on updates to cursor and transaction cleanup.

Rationale for delays:

  • Had not considered complexity with cursor and transaction cleanup.

Risks:

  • No risks.

2022-10-04: Updating end date to 2022-10-18

Status update:

  • Updates to retry logic merged.
  • Prose test for bulk insert merged.
  • Working on remaining prose tests.

Rationale for delays:

  • Prose tests as specified resulted in some test errors on slower hosts.

Risks:

  • No risks.

2022-09-18: Updating end date to 2022-10-07

Status update:

  • Updates to retry logic in review.
  • Prose test for mongocryptd merged.
  • Working on remaining prose tests.

Rationale for delays:

  • Review for retry logic took longer than expected.

Risks:

  • No risks.

2022-09-04: Updating end date to 09-23-2022

Status update:

  • Updates to retry logic in review.
  • Working on prose tests.
  • Working on specification change to clarify drivers should prefer creating connections in the background.

Rationale for delays:

  • Updating retry logic more complex than anticipated.

Risks:

  • No risks.

2022-08-22: Updating target date to 09-06-2022

Status update:

  • Updates to GridFS merged.
  • "Don't check Context expiration in WithTransaction" merged.
  • Updates to retry logic in progress.

Rationale for delays:

  • PTO for one week.

Risks:

  • No risks.

2022-08-08: No change to target date.

Status update:

  • Updates to GridFS in review.
  • "Pre-write context expiration should not be considered a network error" in progress.
  • "Don't check Context expiration in WithTransaction" in progress.
  • Next up: update retry logic.

Rationale for delays:

  • No delays.

Risks:

  • No risks.

2022-07-26: Updating target date to 08-19-2022

Status update:

  • Simplification of maxTimeMS appension in review.
  • New error API for Timeout errors in review.
  • Helping with specification changes.

Rationale for delays:

  • Specification changes are still in progress.
  • Skunkworks.

Risks:

  • No Risks 

    2022-07-12: No change to target date.

Status update:

  • Supporting context in GridFS in progress.
  • New error API for Timeout errors in progress.
  • Giving talk at DBX all hands.

Rationale for delays:

  • No delays.

Risks:

  • No risks.

2022-06-28: Setting target date to 08-05-2022

Status update:

  • Working on Go driver 1.10.0 requirements: (GridFS functions, Error API)
  • 1.10.0 support will be documented as beta.

Rationale for delays:

  • Some of the spec is still in progress (e.g. retry logic) and is being investigated (e.g. whether drivers can use a thread-local or context to represent the timeout).
  • Re-estimated remaining work.
  • Skunkworks.

Risks:

  • No risks.

    2022-06-13: Setting target date to 06-24-2022

Status update:

  • Timeout logic for RunCommand in review.
  • Planning to reduce API to Client only.

Rationale for delays:

  • Paused during MDBW.
  • The target end date is a rough estimate based on the current state of things since the specification is not finalized.

Risks:

  • No risks.

2022-05-31: Setting target date to 06-17-2022

Status update:

  • Tests for RTT90 monitoring in review.

Rationale for delays:

  • PTO last week.

Risks:

  • No risks. The in progress work is on a separate branch and does not impact the 6.0 release.

2022-05-16: No change to target date.

Status update:

  • Merged adding Timeout to Client, Database and Collection
  • Merged Timeout logic for all basic operations

Rationale for delays:

  • No delays.

Risks:

  • No risks. Merging to a branch in case the specification changes or implementation are completed after 6.0.

2022-05-02: Setting target date to 05-27-2022

Status update:

  • Add Timeout to Client, Database and Collection in review
  • Add Timeout logic for all basic operations in review

Rationale for delays:
* Underestimated implementation time.

Risks:
* No risks. This is still on track for Go server 6.0 compatible release.


2022-04-18:

Status update:

  • Unified test runner changes in review.
  • Load testing complete.
  • Working on adding Timeout to Client, Database and Collection and adding Timeout logic for all basic operations

Rationale for delays:

  • Underestimated implementation time.

Risks:

  • Risks delaying Go 6.0 deliverables.

2022-04-05: Updating target date to 04-22-2022

Status update:

  • POC PR of proposed behavior in Find approved.
  • Adding load tests to check that connection churn is reduced with proposed values for maxTimeMS.

Rationale for delays:

  • Load tests are a new addition.

Risks:

  • No risks.

2022-03-22: Updating target date to 04-15-2022

Status update:

  • POC of proposed behavior for Find in review, and generated discussion.
  • Next steps: update design, close POC and implement CSOT for CRUD operations.

Rationale for delays:

  • Less availability due to urgent tickets for mongosync.
  • On-boarding new hire.

Risks:

  • No risks.

2022-03-07: No target date set.

Status update:

  • Design in progress.
  • POC of proposed behavior for Find in review.

Rationale for delays:

  • No delays.

Risks:

  • No risks.

2022-02-21: No target date set.

Status update:

  • Design in progress.

Rationale for delays:

  • No delays.

Risks:

  • No risks.

2021-02-11:

  • Currently blocked on the C implementation
  • Most of the work is done, but we might need to make a few changes based on findings from the C implementation
  • This will be picked back up late March - early April


 Description   
Useful Info

Summary

Allow users to configure the timeout on operations by using a single timeout setting.

Motivation

Users have an array of options governing timeouts:
Driver timeouts: Server selection timeout, socket write timeout, socket read timeout, socket connect timeout
Server timeouts: maxTimeMS, maxAwaitTimeMS, wTimeout.
Users are often times unaware of the existence of all these settings and the effect they have on the timeout behavior of the driver and server. Due to this lack of awareness and understanding users often leave these settings at their defaults which is not necessarily what they desire in their timeout behaviors. Furthermore, timeout interaction with retryable writes compounds the situation. The timeout settings do not provide any clarity or reassurance of how long a user will wait for any given write or read.

We should also determine if the desired behavior should be, retry as many times as possible within the defined time period.

Cast of Characters

Lead: Jeff Yemin
Author: Divjot Arora
POCs: Java, C, Go, Swift
Product Owner:
 

Documentation

Scope Document
Technical Design



 Comments   
Comment by Benji Rewis (Inactive) [ 27/Oct/22 ]

Pausing on CSOT work for now and continuing work to stabilize in GODRIVER-2622 (once spec is more finalized).

Comment by PM Bot [ 04/Feb/22 ]

If you are not logged in, you can view the tickets in this epic by following this link.

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