101 Commits

Author SHA1 Message Date
nitnelave
5aef7d7801
Add a get_kind method to Pool (#1228) 2021-11-22 17:00:00 -08:00
Austin Bonander
b419bf5298
docs: revise Pool docs in a couple places (#1526) 2021-11-04 18:52:55 -07:00
Simon Paitrault
135d16a34f
Getting current Handle in Drop (#1395)
Signed-off-by: Freyskeyd <simon.paitrault@gmail.com>
2021-08-30 14:11:49 -07:00
Austin Bonander
0e8ffb564b
fix(postgres): avoid recursively spawning tasks in PgListener::drop() (#1393)
refactor(pool): deprecate `PoolConnection::release()`, provide renamed alts
2021-08-20 16:44:46 -07:00
Austin Bonander
6bb1c716bd
preparing 0.5.6 release (#1382)
* fix(pool): reenable connection reaper

* fix warnings

* chore: bump published crates to 0.5.6

* chore: update CHANGELOG.md for 0.5.6
2021-08-17 12:44:24 -07:00
Austin Bonander
531740550f
fix(pool): reimplement pool internals with futures-intrusive (#1320) 2021-07-21 16:28:44 -07:00
Austin Bonander
8f1d8c7e2f
more pool fixes (#1211)
* a task that is marked woken but didn't actually wake before being cancelled will instead wake the next task in the queue

* a task that wakes but doesn't get a connection will put itself back in the queue instead of waiting until it times out with no way to be woken

* the idle reaper now won't run if there are tasks waiting for a connection, and also uses
the proper `SharedPool::release()` to return validated connections to the pool so waiting tasks get woken

closes #622, #1210

(hopefully for good this time)

Signed-off-by: Austin Bonander <austin@launchbadge.com>
2021-05-17 19:24:40 -07:00
Austin Bonander
5295ff10a5 fix: pool internals improvements
* fix `DecrementSizeGuard::drop()` only waking one `Waiter` regardless of whether that waiter was already woken
* fix connect-backoff loop giving up the size guard
* don't cut in line to open a new connection
* have tasks waiting on `acquire()` wake periodically to check if there's a connection in the queue

Signed-off-by: Austin Bonander <austin@launchbadge.com>
2021-04-06 09:04:20 -07:00
Rich Murphey
edcc91c9f2
replace deprecated compare_and_swap() with compare_exchange() (#1080) 2021-03-03 08:50:12 -08:00
Austin Bonander
0ed524d65c fix(pool): always ping connection on release to see if it's still viable
Signed-off-by: Austin Bonander <austin@launchbadge.com>
2021-02-27 00:56:08 -08:00
Austin Bonander
1a9e0d9a52 ban Ord::{min, max} with Clippy as it's too easy to misread
It is *much* too easy to misread `x.min(y)` as "`x` should be *at least* `y`" when in fact it means the *exact* opposite, and same with `x.max(y)`. This has bitten us in the gluteus maximus a number of times both in SQLx and in private projects.

Signed-off-by: Austin Bonander <austin@launchbadge.com>
2021-02-05 13:30:35 -08:00
Ryan Leckey
d5e0f1b92b
refactor: rename DbOutcome to DbQueryResult 2021-01-20 21:57:26 -08:00
Jonas Platte
08a76f45ae
Rename DbDone to DbOutcome 2021-01-12 14:45:01 +01:00
Chloe Ross
2890d154a3 doc: use the fancy new intra-crate doc links everywhere 2021-01-04 18:39:03 -08:00
up9cloud
e7eaed6220 remove unnecessary Fut 2021-01-04 09:31:47 -08:00
Jakob Truelsen
9146929575 Do not attempt to reconnect on every Io error.
Io errors can describe a lot of things, when connecting to a database in general only
ECONNREFUSED can be hoped to be resolved by waiting. Other errors will require
user intervention
2020-12-25 19:36:54 -08:00
Jakob Truelsen
46f9f44d41 Do not call connect it a bussy loop on connection refused.
If the connection to the database is refused, it is not helpfull to hammer it with connection
attempts, instead we should wait a bit before connecting again. Here we start waiting 10ms,
doubling the wait time for every attempt before setteling out at 2s
2020-12-25 19:36:54 -08:00
Jakob Truelsen
c7cf104a8f Handle dropping wait_for_conn
If wait_for_conn is dropped before completing, release will call
wake on a waker that noone is listining on. This leads to a state where
waiting will gro indefinitly while all connections are idle.

To fix this we turn waiting into a queue of unique Weak pointers.
This way if wait_for_conn is dropped the pointer in waiting cannot
be upgraded, we can use this as a signal that we shoud wake the
next one instead.
2020-12-22 20:13:40 -08:00
Ryan Leckey
c410f88bcd
chore: update several dependencies 2020-12-19 00:26:06 -08:00
Andrew Whitehead
b188c83717 manually close connections in SharedPool::close 2020-12-17 23:24:42 -08:00
Andrew Whitehead
07fd531a30 decrement pool size when connection is released 2020-12-17 23:24:42 -08:00
Austin Bonander
cebfcce1b5 docs: WIP improve docs about Pool
Signed-off-by: Austin Bonander <austin@launchbadge.com>
2020-11-12 07:15:08 -08:00
Austin Bonander
fa7981f68a fix(pool): ignore spurious wakeups when waiting for a connection
fixes #622
2020-10-13 10:37:10 -07:00
Joshua Nelson
920168a129 Add examples to after_connect documentation
This requires testing with `--features postgres`.
2020-10-13 10:02:24 -07:00
Joshua Nelson
2be4601150 Add size() and num_idle() 2020-10-13 09:57:56 -07:00
Ryan Leckey
e575501a39 feat: add Executor::prepare, a hook into the automatic statement preparation life-cycle 2020-07-24 07:24:23 -07:00
Julius de Bruijn
590f97df4a Caching describe 2020-07-24 07:24:23 -07:00
Ryan Leckey
793f247604 refactor: PoolOptions::new() takes no parameters and the final .connect method takes the URI 2020-07-14 06:07:29 -07:00
Ryan Leckey
00137d4a04 feat: add sqlx::Done and return from Executor::execute()
+ Done::rows_affected()

 + Done::last_insert_id()
2020-07-14 04:31:25 -07:00
Ryan Leckey
61e4a4f566 feat: finish v1 of both cli and embedded migrations 2020-07-12 03:43:55 -07:00
Ryan Leckey
e765287dba refactor: restructure relationship between Pool, Connection, and Options
* Pool::new -> Pool::connect

 * Add Pool::connect_lazy

 * Pool::builder -> PoolOptions::new

 * PoolConnection no longer implements Connection

 * Transaction no longer implements Connection

 * Add ConnectOptions::connect

 * Add Acquire - abstract between &Pool and &mut Connection within one function

 * Remove Connect, move connect to Connection

Co-authored-by: Austin Bonander <austin@launchbadge.com>
2020-07-12 03:43:55 -07:00
Ryan Leckey
8d188c5f1a feat: expose column information on Row
- add database-specific Column types: MySqlColumn, PgColumn, etc.
 - add Row::columns() -> &[DB::Column]
 - add Row::column(I) and Row::try_column(I)
2020-07-05 03:48:36 -07:00
Austin Bonander
e2c707b447 fix: make Pool::try_acquire() fair only when fair=true in the options 2020-07-03 05:59:20 -07:00
Austin Bonander
15e0a5553a chore: document PoolBuilder::fair() 2020-07-03 05:59:20 -07:00
Austin Bonander
17e88ac1a4 perf: implement pool benchmark, make fairness an option 2020-07-03 05:59:20 -07:00
Austin Bonander
8c2acaa258 fix(pool): prevent calls to acquire() from cutting in line
add a few more checks for `is_closed`
2020-07-03 05:59:20 -07:00
Ryan Leckey
4448c0e629 feat: add should_flush and only spawn on drop for PoolConnection if we need to flush 2020-06-21 03:55:31 -07:00
Ryan Leckey
e7d6e67f03 docs(pool): add some module docs to sqlx::pool 2020-06-10 01:51:14 -07:00
Ryan Leckey
ef6afb64d3 feat(pool): use Connect::Options over &str 2020-06-10 01:19:10 -07:00
Ryan Leckey
ec1cfc11e6 refactor(core): rename try_stream2 to try_stream (after removal of conflicting async-stream package) 2020-06-09 23:15:54 -07:00
Ryan Leckey
e1d22a1840 fix(core): async-stream crate seems to lose the stream if the stream owns the object we are streaming
hand-rolled a copy of the idea behind AsyncStream and things seem to work
2020-06-09 02:16:47 -07:00
流光
ebfd5eb4f8 fix bug in init_min_connections 2020-06-07 02:34:20 -07:00
Ryan Leckey
b7f8a5fa81 fix: remove outdated comment, we do have the test_on_acquire setting 2020-06-01 05:37:26 -07:00
Ryan Leckey
9b299d9f09
style(core): apply future-incompatible suggestions 2020-05-30 18:06:21 -07:00
Ryan Leckey
72c1f52caf
style(core): apply clippy suggestions 2020-05-30 18:00:21 -07:00
Ryan Leckey
e5b6047009
feat: introduce docker-compose based testing for running locally against many database combinations 2020-05-30 17:51:55 -07:00
Ryan Leckey
afd831b0d3
feat: re-introduce Pool::begin and add Pool::try_begin to match Pool::try_acquire 2020-05-30 17:51:55 -07:00
Ryan Leckey
0a04abdb3e
feat: Pool is now generic over Database, as opposed to Connection
this fixes an unfortunate interaction with HRTBs where the compiler would
produce infinitely nested PoolConnection<PoolConnection<....
2020-05-30 17:51:55 -07:00
Ryan Leckey
cf7606be1b
fix: Transaction now to rollbacks on drop (again) 2020-05-30 17:51:55 -07:00
Ryan Leckey
bb3b571a57
fix: tweak lifetimes in Executor to limit the scope for the borrow on the query to the single execution 2020-05-30 17:51:55 -07:00