* server: create debug logging
* server: fix stats sending performance
This change fixes how we send stats to the pulse server. This is done by
not serially sending stats on the same task that we extract events from.
The reason for this is that if the event buffer (stats_sender) gets full
it will block namespace create requests.
With this change, we now submit stats http requests off the main stats
task and restrict the stats sending to 128 concurrent requests. This
will allow us to accept more create namespace requests and efficiently
send stats.
* Create a drop in replacement for `Either` with `Any`
* generate Eitherxx variants
* generate Eitherxx variants
---------
Co-authored-by: ad hoc <postma.marin@protonmail.com>
* Return also Program from Connection::run
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Extract LibSqlConnection::execute
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Use LibSqlConnection::execute in write_proxy
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Remove Clone from Program
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Remove Arc from Program
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Allow a single transaction in schema migration
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* fix rustc-hash dep issue
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
---------
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
Holding a lock during query execution can lead to a deadlock if
the transaction holding it is blocked by another transaction and
that other transaction can't proceed because it can't get the lock
that is held by the first transaction.
Fixes#1290
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* wip - passing userauthcontext instead of http headers
* revert comment out
* fixed temp change
* Merge branch 'main' into jw/changing-how-jwt-is-passed-around
* fixed failing tests
* next iteration of unit test fixing
* fixed remaining unit tests
* reverted debug
* removed accidentally added file
* moved str to userauthcontext conversion to from trait
* remove vague comment
* cargo fmt
* cleaned up mod reimportss
* refactored cryptic matching in replica_proxy
* marked potentially duplicate code with // todo dupe #auth
* refactored context to custome errors
* added a factory to produce empty UserAuthContext
* added constructors for UserAuthContext
* switched from try_into to using constructors
* cargo fmt
* added tests for failing cases in parsers
* adding mamespace as param wip
* cargo fmt
* added test for non-asci error
* incremental changes to make namespace as param work
* fixed failing test
* fixed log message
* removed unnecessary error mapping
* turned context to result
* removing dummy tokens from tests
* cargo fmt + cleanup
* namespace passing exammple
* added namespace config for the example
* remove unnecessary dummy token
* reverting accidental commit
* deduplicated handling of hrana hello and repreated hello. Code is fully equivalent to the previous form. No change in logic.
* fixed early return
* lazy unwrapping
* made session fields private again
* fmt
* cleaned up nesting in conn
* fmt
* refactored ns selection to be more expressive
* narrowed the type constraints for namespace arg
* restructured namespace_from_headers
* rearranged the logic of selecting namespace passing method
* fmt
* simplified type
* further refinement of namespace selection logic
* reverted unnecessary change
* reverted unnecessary change
* fmt
* added documentation
* Fix simple queries for schema databases (#1285)
* server: release v0.24.5 (#1286)
* libsql: fix embedded replica multiple txn (#1287)
This commit fixes an issue where new connections for embedded replica's
with write delegation would not create a new "connection" on the server
causing weird issues with transactions and state. The fix here is to
create a new `client_id` when creating a new writer for a new connection
locally. This forces the server to use separate connections to execute
the writes.
Closes#1283
* libsql: prepare v0.3.3 release (#1288)
* Go updates (#1289)
* Go bindings: Improve imports
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Go bindings: continue Next() after a time.Time
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Go bindings: remove unused err check
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
---------
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Remove in-tree version of go-libsql (#1291)
* Go bindings: build only sql-experimental for CI
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Go bindings: Run go-libsql tests in CI
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Go bindings: Remove in-tree version of go-libsql
go-libsql is maintained in https://github.com/tursodatabase/go-libsql
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* Go bindings: Run more tests in CI
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
---------
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* don't regen log on sqld version mismatch (#1296)
* add debug info to release build (#1297)
* Add 'aarch64-unknown-linux-gnu' to dist targets (#1295)
* bump sqld v0.24.6 (#1298)
* Bump arm builder machine (#1301)
Builds of arm images are hanging/crashing
* Revert "add debug info to release build (#1297)" (#1300)
This reverts commit 342e4c368b.
* bottomless: upgrade s3 sdk to 1.0 (#1302)
* bottomless: upgrade s3 sdk to 1.0
* fix behavior version
* libsql: fix embedded replica example (#1282)
* server: add query stats to hrana responses (#1267)
* server: add query stats to hrana responses
* update spec with stats
* remove unused import
* fix snapshot
* more snapshots
* add stats to legacy api
* address comments
* update tonic to 0.11 (#1308)
* Add workflow_dispatch event trigger for PR images (#1306)
* Fix sync (#1316)
Old implementation could never finish if the write is faster than
time needed to do two round-trips to primary.
For example it's enough to have a write every 200ms to make sync
never finish if it's done in embedded replica in Sydney
if the primary and the writer are in the US.
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
* server: add `query_duration_ms` stats to query res (#1309)
* server: add `query_duration_ms` stats to query res
* hrana: default new stats fields
* libsql: fix unwraps in local replicas (#1318)
* server: release v0.24.7 (#1320)
* cargo lock update
* Revert "cargo lock update"
This reverts commit a86b89d8bc.
---------
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
Co-authored-by: Julian <julian@Julians-MacBook-Pro.local>
Co-authored-by: Athos <athos@turso.tech>
Co-authored-by: Lucio Franco <luciofranco14@gmail.com>
Co-authored-by: Piotr Jastrzębski <haaawk@gmail.com>
Co-authored-by: ad hoc <postma.marin@protonmail.com>
Co-authored-by: Pekka Enberg <penberg@iki.fi>
Co-authored-by: Avinash Sajjanshetty <640792+avinassh@users.noreply.github.com>
Old implementation could never finish if the write is faster than
time needed to do two round-trips to primary.
For example it's enough to have a write every 200ms to make sync
never finish if it's done in embedded replica in Sydney
if the primary and the writer are in the US.
Signed-off-by: Piotr Jastrzebski <piotr@chiselstrike.com>
This commit fixes an issue where new connections for embedded replica's
with write delegation would not create a new "connection" on the server
causing weird issues with transactions and state. The fix here is to
create a new `client_id` when creating a new writer for a new connection
locally. This forces the server to use separate connections to execute
the writes.
Closes#1283
We have a user with a failing snapshot, but we don't know why.
We know rename returns EINVAL, which could happen for a variety
of reasons, all of them related to the paths themselves.
By printing the path, we will be able to figure out the actual reason.
Right now we're shooting in the dark.
* deduplicated handling of hrana hello and repreated hello. Code is fully equivalent to the previous form. No change in logic.
* fixed early return
* lazy unwrapping
* made session fields private again
* fmt
* cleaned up nesting in conn
* fmt