| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit does a large overhaul in the overall way on how we interact
with SQLite.
Although SQLite is a fairly straightforward tool, it has one large
caveat, namely the handling of the infamous `SQLITE_BUSY` error.
In WAL mode, the journaling mode we are using, the respective error may
occur if there is an existing write transaction while another thread is
trying to either upgrade an existing read transaction or create an
exclusive transaction at the same time. In this case, SQLite will fail
at the statement that either requires the write operation or at the
creation of the transaction respectively.
In order to tackle this problem, SQLite provides the `busy_timeout`
pragma, which allows specifying a timeout in milliseconds during which
SQLite will retry to obtain a write transaction or fail immediately.
This only works in the latter case, that is, creating a write
transaction from the beginning.
To solve this issue, we introduce two new functions:
1. `database::read_tx`
2. `database::rw_tx`
Both functions accept a database pool alongside a closure accepting a
`Transaction` and returning an arbitrary return value.
The first function creates a deferred transaction that gets rolled-back
in the end, making it suitable for read-only connections.
The latter function creates an exclusive transaction that gets committed
in the end, making it suitable for read-write connections. This also
honors the `busy_timeout`, i.e. the function retries for up to 1s to
acquire a write transaction before failing ultimately.
|
| |
|
|
|
|
| |
This commit introduces the no-op sql macro used to mark string literals
as SQL statements. It is purely semantical and serves the purpose to
quickly identify string literals as SQL statements.
|
| |
|
|
|
|
| |
This commit introduces the `mirror` module which is fairly boilerplate
at the moment. However, everything of it is very well documented using
rustdoc, thereby more or less creating a design document.
|
| | |
|
| |
|
|
|
|
|
| |
```bash
readarray -t publish < <(cargo metadata --format-version 1 | jq -r '.packages[] | select((.id | startswith("path+file:///")) and (.rust_version != null) and (.publish == null or .publish == true or .publish != [])) | .name')
for package in "${publish[@]}"; do echo "$package:"; cargo set-version --bump minor -p "$package"; done
```
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
I noticed that when doing `cargo generate-lockfile` in the workspace
root, it was locking dependencies to 1.83 compatible versions. It turns
out tor-dirserver started on MSRV 1.83 after we already bumped to 1.85,
and has been missed in MSRV updates ever since.
I've found no indication it is intentionally getting this special
treatment and am assuming it is a mistake.
Signed-off-by: hashcatHitman <[email protected]>
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
This commit renames the schema module to the database module in order
to perform better error handling while redesigning the API.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Because we've updated our MSRV, we must bump the minor version for every
package.
This was done as follows:
cargo set-version -p arti 1.6.0
cargo set-version -p oneshot-fused-workaround 0.4.0
cargo set-version -p slotmap-careful 0.4.0
cargo set-version -p test-temp-dir 0.5.0
cargo set-version -p fslock-guard 0.4.0
cargo set-version -p hashx 0.5.0
cargo set-version -p equix 0.4.0
cargo set-version -p caret 0.7.0
cargo set-version -p fs-mistrust 0.12.0
cargo set-version -p safelog 0.6.0
cargo set-version -p retry-error 0.8.0
xargs -I P <<END cargo set-version -p P 0.35.0
tor-basic-utils
tor-error
tor-general-addr
tor-geoip
tor-rtcompat
tor-rtmock
tor-async-utils
tor-config
tor-config-path
tor-rpc-connect
tor-log-ratelim
tor-rpcbase
tor-memquota
tor-units
tor-llcrypto
tor-bytes
tor-protover
tor-checkable
tor-cert
tor-key-forge
tor-hscrypto
tor-socksproto
tor-linkspec
tor-cell
tor-proto
tor-netdoc
tor-consdiff
tor-netdir
tor-relay-selection
tor-persist
tor-keymgr
tor-chanmgr
tor-ptmgr
tor-dircommon
tor-guardmgr
tor-circmgr
tor-dirclient
tor-dirmgr
tor-dirserver
tor-hsclient
tor-hsservice
tor-hsrproxy
tor-relay-crypto
arti-client
arti-relay
arti-rpcserver
arti-ureq
arti-rpc-client-core
END
|
| | |
|
| |
|
|
| |
This feature has been removed from nightly, in favor of doc_cfg.
|
| |
|
|
|
|
|
| |
This commit allows `#[allow(clippy::cognitive_complexity)]` in
`HttpServer::serve` and `HttpServer::handler_tx`. Allowing this might
be controversial but both functions, especially the latter one, are well
documented.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
This commit uses `tor_error::Bug` for indicating thread poisoning.
|
| | |
|
| | |
|
| |
|
|
|
| |
This commit renames `cb` to `endpoint_fn` everywhere, including internal
implementations.
|
| | |
|
| |
|
|
|
| |
This commit enables `PRAGMA foreign_keys=ON;` for every connection by
adding an appropriate statement to `schema::prepare_db`.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit refactors a large part of the HTTP module, namely it
refactors the `Callback` type to a new type called `EndpointFn` which
now works in a transaction based approach and no longer gives access to
the `StoreCache`. The type itself is also no longer a trait but a
concrete type using `fn`.
Another very notable change that became necessary during this commit was
to make large parts of the codebase synchronous instead of async, namely
because it is non-trivial to `Send` a `Transaction` created inside an
async context to a synchronous function. Besides, this change has been
deemed necessary for other reasons to.
The refactoring to more synchronous code has lead to some interesting
changes in `StoreCache` too, namely that in no longer uses async mutex,
but a synchronous mutex instead.
|
| | |
|
| |
|
|
|
|
|
| |
This commit implements the initial draft for the HTTP module.
It is fairly complicated but well documented within the source code,
please refer to that instead.
|
| |
|
|
|
|
| |
This commit adds the `schema.rs` module, which implements the database
schema alongside some functions for initializing the database and
obtaining the database schema version.
|
|
|
This commit lays the initial groundwork for the `tor-dirserver` crate,
a crate that shall implement functionality for dirmirros and dirauths.
For now, the current crate consists of three bare bone modules:
* lib.rs
* err.rs
* mirror.rs
All of which contain mostly boilerplate code for now
|