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

Client Side Operations Timeout

    • Needed
    • Done
    • Client Side Operations Timeout
    • 9
    • 26
    • 28
    • 100
    • Hide

      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

      Show
      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
    • Hide

      DRIVERS-555:
      NA

      Show
      DRIVERS-555: NA

      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

            Assignee:
            benji.rewis@mongodb.com Benji Rewis (Inactive)
            Reporter:
            esha.bhargava@mongodb.com Esha Bhargava
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved:
              38 weeks, 1 day