Piotr Sarna
|
7ca68b3d96
|
errors: Add I/O error class
|
2023-04-17 12:06:34 +02:00 |
|
Piotr Sarna
|
db71c7e4e3
|
database: make transactions (de)serializable
|
2023-04-17 12:06:22 +02:00 |
|
Pekka Enberg
|
74a4d2d11a
|
Garbage collect transactions
Fixes #2
|
2023-04-15 09:53:56 +03:00 |
|
Pekka Enberg
|
43544c9fb6
|
Update README.md
|
2023-04-14 21:32:31 +03:00 |
|
Pekka Enberg
|
c0881944e0
|
Update README.md
|
2023-04-14 21:31:19 +03:00 |
|
avi
|
87b9b27215
|
check if tx can see its own updates
|
2023-04-14 22:56:07 +05:30 |
|
avi
|
e006177480
|
fix typos
|
2023-04-14 22:06:55 +05:30 |
|
avi
|
aff901baea
|
bugfix: make committed rows visibile (fixes #15)
|
2023-04-14 21:59:35 +05:30 |
|
Piotr Sarna
|
546db5a983
|
sync: add AsyncMutex trait
With AsyncMutex, we can use different mutex mechanisms
in the database - e.g. tokio::sync::Mutex.
|
2023-04-14 15:09:13 +02:00 |
|
Piotr Sarna
|
bfe3bcef71
|
asyncify
In order to prepare for #3, the APIs are made asynchronous.
It also applies to tests and benches.
|
2023-04-14 15:08:51 +02:00 |
|
Pekka Enberg
|
620b8c6362
|
Update README.md
|
2023-04-14 14:43:28 +03:00 |
|
Pekka Enberg
|
9247e44324
|
Minimize library binary size
Shrinks binary size from 319K to 282K.
|
2023-04-14 14:07:49 +03:00 |
|
Pekka Enberg
|
b8b8d3f746
|
Remove rustyline dependency
It's not needed, likely leftover from some previous prototyping.
|
2023-04-14 14:02:02 +03:00 |
|
Pekka Enberg
|
4a98d32ce1
|
Update README.md
|
2023-04-14 13:52:55 +03:00 |
|
Pekka Enberg
|
5f84604d67
|
Add some more micro-benchmarks
|
2023-04-14 13:50:24 +03:00 |
|
Pekka Enberg
|
f223615910
|
Merge pull request #12 from penberg/parking-lot
Switch to parking_lot mutex
|
2023-04-14 13:33:59 +03:00 |
|
Pekka Enberg
|
ed5e259cfe
|
Switch to parking_lot mutex
It's faster than the standard library mutex.
|
2023-04-14 12:04:43 +03:00 |
|
Pekka Enberg
|
0f956fa179
|
Use Criterion's throughput estimation
Iteration time is of course interesting, but let's also use throughput
estimation on MVCC operations such as read(), begin_tx(), etc..
|
2023-04-14 11:59:36 +03:00 |
|
Piotr Sarna
|
8b798593a1
|
simplify CI
... since the old script messed up Clippy sometimes
|
2023-04-14 10:46:08 +02:00 |
|
Piotr Sarna
|
fdbe419789
|
fix CI (#9)
There was a minor import inconsistency in database/benches
|
2023-04-14 10:37:30 +02:00 |
|
Piotr Sarna
|
1bb752cab9
|
add basic CI (#8)
|
2023-04-14 10:18:37 +02:00 |
|
Pekka Enberg
|
f84f185835
|
Improve transaction tracing
|
2023-04-14 11:08:35 +03:00 |
|
Piotr Sarna
|
aebaf623a9
|
database: apply clippy fixes
They were preexisting, but now all the future patches can
use `clippy --tests` as well.
|
2023-04-14 09:54:33 +02:00 |
|
Piotr Sarna
|
7622ea5f98
|
database: add transaction tracing
The tracing is also added to tests, so that the behavior
can be observed:
```
$ cargo test -- --nocapture --test-threads 1
test database::tests::test_dirty_write ... 2023-04-14T07:51:15.919503Z TRACE test_dirty_write: mvcc_rs::database: BEGIN { id: 0, begin_ts: 0, write_set: {}, read_set: {} }
2023-04-14T07:51:15.919554Z TRACE test_dirty_write: mvcc_rs::database: BEGIN { id: 1, begin_ts: 1, write_set: {}, read_set: {} }
ok
test database::tests::test_fuzzy_read ... 2023-04-14T07:51:15.919732Z TRACE test_fuzzy_read: mvcc_rs::database: BEGIN { id: 0, begin_ts: 0, write_set: {}, read_set: {} }
2023-04-14T07:51:15.919762Z TRACE test_fuzzy_read: mvcc_rs::database: COMMIT { id: 0, begin_ts: 0, write_set: {1}, read_set: {1} }
2023-04-14T07:51:15.919778Z TRACE test_fuzzy_read: mvcc_rs::database: BEGIN { id: 1, begin_ts: 2, write_set: {}, read_set: {} }
2023-04-14T07:51:15.919793Z TRACE test_fuzzy_read: mvcc_rs::database: BEGIN { id: 2, begin_ts: 3, write_set: {}, read_set: {} }
2023-04-14T07:51:15.919811Z TRACE test_fuzzy_read: mvcc_rs::database: COMMIT { id: 2, begin_ts: 3, write_set: {1}, read_set: {} }
ok
test database::tests::test_insert_read ... 2023-04-14T07:51:15.919944Z TRACE test_insert_read: mvcc_rs::database: BEGIN { id: 0, begin_ts: 0, write_set: {}, read_set: {} }
2023-04-14T07:51:15.919974Z TRACE test_insert_read: mvcc_rs::database: COMMIT { id: 0, begin_ts: 0, write_set: {1}, read_set: {1} }
2023-04-14T07:51:15.919989Z TRACE test_insert_read: mvcc_rs::database: BEGIN { id: 1, begin_ts: 2, write_set: {}, read_set: {} }
ok
test database::tests::test_lost_update ... 2023-04-14T07:51:15.920116Z TRACE test_lost_update: mvcc_rs::database: BEGIN { id: 0, begin_ts: 0, write_set: {}, read_set: {} }
2023-04-14T07:51:15.920146Z TRACE test_lost_update: mvcc_rs::database: COMMIT { id: 0, begin_ts: 0, write_set: {1}, read_set: {1} }
2023-04-14T07:51:15.920161Z TRACE test_lost_update: mvcc_rs::database: BEGIN { id: 1, begin_ts: 2, write_set: {}, read_set: {} }
2023-04-14T07:51:15.920178Z TRACE test_lost_update: mvcc_rs::database: BEGIN { id: 2, begin_ts: 3, write_set: {}, read_set: {} }
2023-04-14T07:51:15.920196Z TRACE test_lost_update: mvcc_rs::database: ROLLBACK { id: 2, begin_ts: 3, write_set: {}, read_set: {} }
2023-04-14T07:51:15.920210Z TRACE test_lost_update: mvcc_rs::database: COMMIT { id: 1, begin_ts: 2, write_set: {1}, read_set: {} }
2023-04-14T07:51:15.920223Z TRACE test_lost_update: mvcc_rs::database: BEGIN { id: 3, begin_ts: 6, write_set: {}, read_set: {} }
ok
test database::tests::test_read_nonexistent ... 2023-04-14T07:51:15.920352Z TRACE test_read_nonexistent: mvcc_rs::database: BEGIN { id: 0, begin_ts: 0, write_set: {}, read_set: {} }
ok
```
|
2023-04-14 09:53:57 +02:00 |
|
Piotr Sarna
|
9d99090f67
|
.gitignore: add Cargo.lock
mvcc-rs is considered a library, so let's ignore its Cargo.lock
as per https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
|
2023-04-14 09:53:57 +02:00 |
|
Piotr Sarna
|
05ee98971b
|
add tracing
|
2023-04-14 09:30:28 +02:00 |
|
Pekka Enberg
|
bc7269a776
|
Fix typo
|
2023-04-13 10:41:01 +03:00 |
|
Pekka Enberg
|
e2fc841479
|
Move is_write_write_conflict() definition
|
2023-04-13 10:19:21 +03:00 |
|
Pekka Enberg
|
87ef3e1cd8
|
Add a comment for is_write_write_conflict()
|
2023-04-13 10:18:19 +03:00 |
|
Pekka Enberg
|
f51c4ee5a8
|
Move TxID type definition
|
2023-04-13 10:14:44 +03:00 |
|
Pekka Enberg
|
b73c11015a
|
Reorder code
|
2023-04-13 10:13:19 +03:00 |
|
Pekka Enberg
|
204d65ad05
|
Move clock code to clock.rs
|
2023-04-13 10:09:23 +03:00 |
|
Pekka Enberg
|
44ba56c5a8
|
Update README
|
2023-04-13 10:09:13 +03:00 |
|
Pekka Enberg
|
824669d471
|
Move code into DatabaseInner
Let's move rest of the code into DatabaseInner like we did for
`rollback_tx` as a code cleanup.
|
2023-04-13 10:05:09 +03:00 |
|
Pekka Enberg
|
d7ecfc054c
|
Fix lost update anomaly
Fixes #5
|
2023-04-13 09:57:26 +03:00 |
|
Pekka Enberg
|
eb250e1e83
|
Wire up flamegraphs to cargo bench
|
2023-04-12 12:39:14 +03:00 |
|
Pekka Enberg
|
477da5b60a
|
Fix compile error
|
2023-04-12 12:17:34 +03:00 |
|
Pekka Enberg
|
a52bf9158b
|
Fix delete() TX ID parameter name
Align it with the rest of the code.
|
2023-04-12 12:12:37 +03:00 |
|
Pekka Enberg
|
77d639fc20
|
Fix concurrency test
It was accidentally using row ID as transaction ID...
|
2023-04-12 11:56:22 +03:00 |
|
Pekka Enberg
|
3cecf777cf
|
Assert that we're manipulating an active transaction
|
2023-04-12 11:55:34 +03:00 |
|
Pekka Enberg
|
22042612d5
|
Concurrency test
The test is disabled because it triggers an assertion in the MVCC
implementation.
|
2023-04-12 11:45:15 +03:00 |
|
Pekka Enberg
|
fc93642643
|
Simple microbenchmarks
|
2023-04-10 18:22:10 +03:00 |
|
Pekka Enberg
|
02f40c0568
|
Move MVCC to database.rs
Let's keep lib.rs small and tidy.
|
2023-04-09 08:55:06 +03:00 |
|
Pekka Enberg
|
8f30c20215
|
Replace unwrap() with NoSuchTransactionID error
|
2023-04-09 08:53:03 +03:00 |
|
Pekka Enberg
|
df0cadc02e
|
Clean up LocalClock default trait
|
2023-04-08 18:37:23 +03:00 |
|
Pekka Enberg
|
df5500e0df
|
Add test case for dirty read on delete
The test fails, btw.
|
2023-04-08 18:35:45 +03:00 |
|
Pekka Enberg
|
fb60ccd04d
|
Improve test suite
|
2023-04-08 18:03:49 +03:00 |
|
Pekka Enberg
|
957949a49d
|
Fix delete() on non-existent ID
|
2023-04-08 18:03:41 +03:00 |
|
Pekka Enberg
|
7a2085c02f
|
Improve lost update test case
Let's verify that first-writer wins. We still need to fix the second
writer commit() to fail.
|
2023-04-08 16:42:40 +03:00 |
|
Pekka Enberg
|
29fca23417
|
Add test case for lost updates
We currently never fail commit() operations so the test case is
incomplete. But let's add it as a place-holder.
|
2023-04-08 16:34:16 +03:00 |
|