Commit Graph
17 Commits
Author SHA1 Message Date
Tim Deeb-SwihartandGitHub be7b5514a5 Reconnect to SQL databases when connections fail (#5926)
## What changed?

Both our PostgreSQL and MySQL database backends will now automatically
reconnect to the database when certain errors occur: all errors chosen
have been experienced when testing this behavior through an AWS Aurora
RDS failover of either MySQL or PostgreSQL.

For both backends we will reconnect when we see:
- `ECONNRESET`
- `ECONNABORTED`
- `ECONNREFUSED`
- `io.EOF`
- `io.ErrUnexpectedEOF`
- `database/sql/driver.ErrBadConn`

for postgres we will also reconnect on the following SQLStates:
- `25006` read-only transaction
- `57P03` cannot connect now
- `0A000` feature not supported, but ONLY when the message is `cannot
set transaction read-write mode during recovery`

for mysql we will also reconnect when we see the following error codes:
- `1040` too many connections 
- `1792` read-only transaction (SQLstate `25006`)
- `1836` running in read-only mode

This logic is easily extensible should we discover more failure modes
over time

## Why?

We've had multiple community reports of Temporal problems during RDS
failover. One part of this is the fact that we wouldn't necessarily
reconnect; we were at the whims of our chosen SQL abstraction's
connection pooling logic.

## How did you test it?

I manually tested this functionality in the presence of repeated RDS
failovers: 

- [x] postgres12 plugin with pq driver
- [x] postgres12 plugin with pgx driver
- [x] mysql plugin

Automated testing will be added to our regular testing pipelines once
our infrastructure friends have added the support I need (it's in
progress)

## Potential risks

We're concerned there's a correctness issue in our PostgreSQL backend
that's related to our behavior during an RDS failover. If we merge this
before I figure out what's going on, we could hide the issue and make it
harder to reproduce.

## Documentation
N/A

## Is hotfix candidate?
Yes?
2024-05-17 16:59:15 -07:00
ShivamandDavid Reiss 6fd938d17f Removed CreateTask from db and persistence layer (#5606)
## What changed?
Noticed that `db.CreateTask` and `persistence.CreateTask` were
relatively unused and could be removed.

## How did you test it?
Current CI/CD tests

## Potential risks
Could break things if an unseen component were to use these methods;
have checked it to the best of my abilities.

## Is hotfix candidate?
No
2024-04-12 11:48:50 -07:00
Roey BermanandGitHub a30e8a2e7d Implement build id scavenger (#4430) 2023-06-09 10:36:38 -07:00
Roey BermanandDavid Reiss fea92f6358 Address comments from #4346 review (#4405)
Note: This commit came from a feature branch and is not expected to build.
2023-05-26 16:03:31 -04:00
Roey BermanandDavid Reiss d98b6668b0 Worker versioning leftovers (#4400)
Note: This commit came from a feature branch and is not expected to build.
2023-05-26 16:03:31 -04:00
Roey BermanandDavid Reiss cbfa37e0af Implement GetWorkerTaskReachability API (#4346)
Note: This commit came from a feature branch and is not expected to build.
2023-05-26 16:03:31 -04:00
Roey BermanandDavid Reiss 8a2a3e7a6a Implement task queue user data seed (forced replication) (#4259)
Note: This commit came from a feature branch and is not expected to build.
2023-05-26 16:03:31 -04:00
Roey BermanandDavid Reiss e3b52e558d Refactor to use new protos and persistence (#4194)
Note: This commit came from a feature branch and is not expected to build.
2023-05-26 16:03:31 -04:00
Yichao YangandGitHub ae23339fca Make matching persistence range queries [inclusive, exclusive) (#2599)
- Range for matching GetTasks is now [inclusive, exclusive), instead of (exclusive, inclusive]
- Range for matching CompleteTasksLessThan is now < max TaskID, instead of <=
- Range for admin ListTaskQueueTasks is now [inclusive, exclusive)
2022-03-15 10:42:12 -07:00
wxing1292andGitHub 0ecaee5672 Use internal error to indicate code bug / contract breach (#1958)
* Update sql persistence layer
* Update cassandra persistence layer
* Update visibility persistence layer
2021-09-21 17:59:56 -07:00
wxing1292andGitHub b7a94537c0 Use serviceerror.Unavailable error type instead of serviceerror.Internal (#1916)
* Use serviceerror.Unavailable error type instead of serviceerror.Internal
  * serviceerror.Unavailable indicates errors like service's dependency is down, retryable
  * serviceerror.Internal indicates errors like NPE in service logic, non-retryable
2021-09-13 18:31:14 -07:00
wxing1292andGitHub eb65ab4b26 Add visibility tasks table for SQL (#1055)
* Add SQL visibility_tasks table for Kafka deprecation
2020-12-09 11:17:23 -08:00
wxing1292andGitHub 24b80b2f91 Add context to all SQL interfaces (#980)
* Add context to all SQL interfaces
* Wire context with SQLx
* Set default execution DB timeout to 5s
* Set default visibility DB timeout to 10s
2020-11-11 16:30:36 -08:00
wxing1292andGitHub a8e5c2fa03 Bugfix: matching persistence layer update sticky task queue (#935)
* Sticky task queue update should be done within transaction lock or conditional update
2020-11-02 11:54:52 -08:00
wxing1292andGitHub 5942de0661 Use filter struct instead of pointer for matching SQL layer (#934) 2020-10-31 11:10:14 -07:00
wxing1292andGitHub 845940ab38 Add SQL persistence specific tests (#790)
* Add matching task queue tests
2020-10-02 21:40:50 -07:00
wxing1292andGitHub 35272a29e1 Split SQL storage interfaces & definitions (#788) 2020-10-02 11:47:09 -07:00