Commit Graph

153 Commits

Author SHA1 Message Date
Mazdak Farrokhzad da71d0f9b1 WASM ABI: insert -> datastore_insert_bsatn & impl new semantics (#1639) 2024-09-05 19:32:26 +00:00
joshua-spacetime 8282b674b5 fix: Always remember to release a read only tx (#1613) 2024-08-20 21:31:05 +00:00
james gilles 45b2ceee9a Move schemas to schema crate, rename Def to RawDefV8 (#1498) 2024-07-24 17:38:30 +00:00
james gilles f81f2a7492 Move db module from spacetimedb_sats to spacetimedb_lib (#1479) 2024-07-17 20:59:44 +00:00
Shubham Mishra 276387d2b3 Timer Table Implementation (#1449)
Co-authored-by: Ingvar Stepanyan <me@rreverser.com>
2024-07-16 08:38:56 +00:00
joshua-spacetime 39344852af refactor(1494): Remove SQL DDL per 1.0 SQL spec (#1499) 2024-07-12 18:55:28 +00:00
Noa 10b151b999 Protobufectomy: server (#1077)
Co-authored-by: Phoebe Goldman <phoebe@goldman-tribe.org>
Co-authored-by: Jeremie Pelletier <jeremiep@gmail.com>
2024-07-12 18:02:18 +00:00
joshua-spacetime 44832f2695 chore: Remove already tracked subscription counter (#1412) 2024-06-13 15:26:39 +00:00
Phoebe Goldman 6c45e76a98 Integrate snapshotting into core (#1344) 2024-06-11 12:40:02 +00:00
joshua-spacetime ccaad88130 fix(1353): Remove underscore based table access checks (#1354) 2024-06-10 09:58:51 +00:00
joshua-spacetime 61ee5def83 feat: System table based slow query logging (#1350) 2024-06-07 21:37:34 +00:00
Ingvar Stepanyan d1033b5d93 Shared C# codegen for BSATN (#1312)
Signed-off-by: Ingvar Stepanyan <me@rreverser.com>
Co-authored-by: james gilles <jameshgilles@gmail.com>
Co-authored-by: John Detter <no-reply@boppygames.gg>
2024-06-07 19:22:02 +00:00
joshua-spacetime b3339c80bc feat(1329): System table for system variables (#1342)
Closes #1329.

Used to persist global parameters for slow query logging and cardinality limits.
2024-06-06 20:30:07 +00:00
Jeremie Pelletier da23401368 Jeremie/notify sql (#1198)
* Notify subscriptions from SQL code path

* Remove blocking_broadcast_event

(From another PR, but helps tests to pass)

* Update from review

* Update from rebase

* cargo fmt

* cargo fmt

* cargo fmt

* update space.rs
2024-06-03 22:51:05 +00:00
Mazdak Farrokhzad 89aecd15e3 Split ColumnOp into one with row indices and one with FieldName & other enabled changes (#1207)
* 1. Split ColumnOp into ColumnOp & FieldOp, former storing ColId
2. Shrink SqlAst to 80 bytes, so it can be passed in registers
3. Store end-result Header in IndexSemiJoin
4. Remove operational use of Header in ColumnOp & build_query
5. Simplify RowRef::{get, project, project_owned}

* Make parts of build_query actually infallible.

1. Make IndexSemiJoin::filter infallible.
2. Make ColumnOp::compare and friends infallible.
3. Make RowRef::{get, project, project_owned} infallible.

* Make RelOps::next itself infallible

* 1. with_select{_cmp}: ensure type safety o query exec cannot panic
2. Document RelValue::{get, read_or_take_column, project_owned}
3. Refactor optimize_select
4. Ensure in optimize_select that conditions are merged with preceding selects

* remove RelOps::{head, row_count}; head is redundant & row_count is useless

* remove Relation trait; it does not carry its weight

* make build_query infallible

* simplify IndexSemiJoin, make it slightly less branchy

* simplify try_index_join

* split IndexSemiJoin into Left & Right parts

* move get_field_pos to test code

* move test version of build_query to test code
2024-06-03 16:45:32 +00:00
Mazdak Farrokhzad f6b39c0abc IndexJoin/JoinInner: store ColId (#1166)
* IndexJoin/JoinInner: store ColId

* QueryExpr: carry full Header info for resulting query

* refactor and dedup build_query
2024-06-03 15:26:49 +00:00
Noa a8549457e9 Re-add execute_sql_mut_tx (#1313) 2024-06-03 09:49:03 +00:00
joshua-spacetime 6512f35c6b feat(1231): Add a configurable row limit for queries (#1293)
Closes #1231.

Queries that are estimated to exceed this row limit are rejected.
And the same holds for subscriptions.
2024-05-30 21:35:48 +00:00
Mazdak Farrokhzad 4ac49e564d execution_set.check_auth(...) on initial subscription (#1274) 2024-05-28 19:44:32 +00:00
Shubham Mishra 1f2331634d due cleanup (#1301) 2024-05-27 18:21:17 +00:00
Zeke Foppa 8c3fa75907 Remove incremental-joins.md (#1296)
* [bfops/rm-include-str]: empty

* [bfops/rm-include-str]: do thing

---------

Co-authored-by: Zeke Foppa <github.com/bfops>
2024-05-24 17:03:09 +00:00
Noa 6b1a3d3896 Module hotswapping (#1147) 2024-05-22 17:49:35 +00:00
Noa f0c182e2b0 Atomically downgrade lock when committing tx to prevent deadlock (#1252)
* Atomically downgrade lock when committing tx to prevent deadlock

* Address review
2024-05-20 16:59:07 +00:00
Piotr Sarnacki d08e9845a4 Always send TransactionUpdate to the sender (#1111)
* Always send TransactionUpdate to the sender

This commit changes transaction update broadcast to always send an
update to the sender, even if the sender is not subscribed to any
data that was committed. In such case the transaction update is sent
with an empty database update.

* Remove debug printlns

* Update code after rebase

* Fix test

* Update crates/core/src/subscription/module_subscription_manager.rs

Co-authored-by: Mazdak Farrokhzad <twingoow@gmail.com>
Signed-off-by: Piotr Sarnacki <drogus@gmail.com>

* Extract sending message with error handing in module_subscription_manager

* Bring back a new line

* SDK test that the client is notified of a reducer it called

* cleanup subscription code a bit

* Fix merge problem

* Lint + fmt

* Fix test

---------

Signed-off-by: Piotr Sarnacki <drogus@gmail.com>
Co-authored-by: Mazdak Farrokhzad <twingoow@gmail.com>
Co-authored-by: Phoebe Goldman <phoebe@goldman-tribe.org>
2024-05-16 12:35:03 +00:00
Mazdak Farrokhzad 9546a22e17 refactor compile_read_only_query: dedup SideEffect errors (#1235) 2024-05-15 13:48:02 +00:00
Noa b3ea0f515f Fix select * from * (#1218)
* Add SDK test for `SELECT * FROM *`

Which doesn't pass, because we broke it.

* Fix select * from *

---------

Co-authored-by: Phoebe Goldman <phoebe@goldman-tribe.org>
2024-05-14 04:38:15 +00:00
Mazdak Farrokhzad 7c52ef555a clarify cost of dropping the updates in eval_incr (#1192) 2024-05-02 16:47:34 +00:00
Mazdak Farrokhzad 0142e14de5 Implement RelValue: Eq + Hash (#1107)
* impl Eq + Hash for RelValue

* Use Hash for RelValue in incr-eval

* naming: spell out pv, rv, and tro
2024-04-30 22:13:50 +00:00
Mazdak Farrokhzad e144c400c5 Redefine FieldName as (TableId, ColId) (#1165)
* redefine FieldName as (TableId, ColId)

* fix & refactor tests + move MemTable/Header test helpers test code
2024-04-30 20:59:20 +00:00
joshua-spacetime 18bf7ee5e5 fix(1115): Identify subscribers by Identity AND Address (#1121)
Closes #1115.

Previously subscribers were only identified by their Identity.
However the same Identity can be associated to different Addresses.
2024-04-19 02:01:32 +00:00
Mazdak Farrokhzad ce7d9b0565 slow query log: only use Instant::now when needed + refactor (#1110)
* slow query log: only use Instant::now when needed + refactor

* address Joshua's review
2024-04-18 21:41:35 +00:00
Mario Montoya 7d5eb1532d Slow query log (#1052)
* Slow query log

* Addressing some PR comments
2024-04-17 13:53:55 +00:00
Mazdak Farrokhzad f560101551 Make Table::clone_structure cheaper by: (#1090)
- Arcing `TableSchema`, and this has benefits elsewhere too.
- Arc<[_]>ing the visitor program instructions.

The data behind the Arcs very rarely change,
which is the perfect case for an Arc.
2024-04-16 19:07:36 +00:00
Mazdak Farrokhzad d6815ebf9c Shrink AV and AT to 24 & 16 bytes respectively, and also friends. (#1047) 2024-04-13 16:51:18 +00:00
Kim Altintop be67d1aa27 core: More compact TxData (#950)
`TxData` is the representation of a transaction after it was committed,
and is passed around for evaluation of subscription queries and sending
the result to clients.

With the new commitlog, it can be represented more compactly, such that
copies for writing to the log can be avoided.

Note that this patch stops short of refactoring `DatabaseUpdate`, which
is another representation of the same information as sent to clients.
This means that `ProductValue`s need to be cloned from `TxData`, just as
before.
2024-04-12 08:06:52 +00:00
Kim Altintop 47048559b4 core: Integrate new commitlog + durability (#926)
This patch attempts to integrate the new commitlog with the minimum
changes.

Most of the diff comes from deletions of the legacy log and the need to
adjust tests due to the requirement for a tokio runtime when a durable
database is used in tests.

The "meat" of the patch are the `RelationalDB` constructors,
`RelationalDB::commit_tx`, and the replay logic in
`locking_tx_datastore`.

While `DataKey` is gone, there is still some redundant data being passed
around, which will be addressed in the follow-up patch.
2024-04-11 22:46:31 +00:00
joshua-spacetime 530cdaa062 fix: Disable unused metrics (#1056)
This patch:

(1) Disables unused WasmInstanceEnv metrics,
(2) Removes unused query compilation metrics,
(3) Removes unused RelationalDB metrics
2024-04-09 19:43:10 +00:00
Mazdak Farrokhzad 344861f290 use nohasher_hash and ahash instead of siphash13 (#1040)
* use nohasher_hash and ahash instead of siphash13

* re-export types in spacetimedb_data_structures::map
2024-04-05 17:30:51 +00:00
Mazdak Farrokhzad af846dd994 remove dead code in subscription (#1039) 2024-04-05 12:08:07 +00:00
Shubham Mishra 84071b5629 Batch metrics with ctx (#916)
* Commit iter metrics

* test: Make full-join benchmark async

* use Vec instead of Hash

* Revert "test: Make full-join benchmark async"

This reverts commit eed5aa8a55.

* rebase on master

* lint

* refector api

* remove lifetime from ctx (#1017)

* move ctx to higher level

* fix boilterplate

* batch more

---------

Co-authored-by: joshua-spacetime <josh@clockworklabs.io>
2024-04-05 06:57:40 +00:00
Mazdak Farrokhzad ddf6048547 Split DatabaseTableUpdate in deletes/inserts vecs (#1019)
* eval_incr: add RelValue::ProjRef(&PV) to avoid cloning PVs

* 1. rename `build_source_query` -> `in_mem_to_rel_ops`
2. `SourceExpr::{MemTable -> InMemory}`
3. clariy some commentary re. SourceExpr/SourceSet and friends
4. cleanup: simplify `compile_select_eval_incr`
5. remove ProgramStore; twas dead code.

* add SourceProvider, simplifying the source set stuff

* use MemTable less

* split DatabaseTableUpdate in deletes/inserts vecs

* incr-join: avoid temp Vec<_> allocs

* store deletes/inserts separately in eval_incr results; mostly cleanup
2024-03-27 20:12:30 +00:00
joshua-spacetime 99bd7ac591 perf(1024): Remove serialization from tx execution thread (#1027)
Closes #1024.

Before this change,
we would serialize messages **before** inserting into the send queue.

Because we commit the tx only after inserting into the send queue,
this meant we were holding onto the database lock unnecessarily.

After this change,
we serialize messages **after** inserting into the send queue.
This means we serialize only after committing the tx.
2024-03-27 16:06:10 +00:00
Mazdak Farrokhzad 9141a42622 Bump Rust to 1.77 + fix warnings + use Bound::map (#1020)
* bump Rust to 1.77 + fix warnings + use Bound::map

* use .truncate(true) for OpenOptions
2024-03-25 20:27:08 +00:00
Phoebe Goldman ba8a8d93c3 BFLATN -> BSATN fast-path for fixed-length rows (#1005)
* Implement (but do not use) a fast path for BFLATN -> BSATN conversion

* fmt and clippy

* `u16` offset rather than `usize`

* Address Joshua's review

* Define methods on `RowRef` and `RelValue` which use the new serializer

* Comment in `align_to` about div-by-zero

Co-authored-by: Mazdak Farrokhzad <twingoow@gmail.com>
Signed-off-by: Phoebe Goldman <phoebe@goldman-tribe.org>

* Add benchmark comparing BFLATN -> BSATN with and without the fast path

* Add benchmark on `u64_u64_u32`, which has less interior padding than `u32_u64_u64`

* Remove `to_len` from `to_bsatn_extend`

It turns out to be slower than just eating the `realloc`s.

* Remove unused `to_bsatn_slice`

I thought I would need it, but it ended up not being useful.

* Expand comment with example; `Box<[...]>` to reduce memory footprint

* Comments from Mazdak's review

---------

Signed-off-by: Phoebe Goldman <phoebe@goldman-tribe.org>
Co-authored-by: Mazdak Farrokhzad <twingoow@gmail.com>
2024-03-25 19:46:10 +00:00
joshua-spacetime b0b7b58982 fix: Consistency test for subscription message ordering (#1007)
Updates a test to wake up a writer tx only after a reader tx has started.
2024-03-21 19:15:51 +00:00
joshua-spacetime b36dda419e fix(996): Do not release database lock early for subscriptions (#997)
Fixes #996.
2024-03-20 17:21:39 +00:00
joshua-spacetime 8d83b00e27 test(996): Subscriptions should not drop read lock early (#995)
If a subscription drops its read lock on the database too early,
that is before it sends its updates to the client,
this test will fail.
2024-03-20 16:40:02 +00:00
Mazdak Farrokhzad 5cbdcaecbb incr-join, find_updates: avoid unncecessary clones & use partition (#988)
* incr-join, find_updates: avoid unncecessary clones & use partition

* JoinSide: store 'Vec<PV>'s instead

* address joshua & phoebe's reviews
2024-03-19 17:21:12 +00:00
Phoebe Goldman a21b1bc3a9 Nuke to_mem_table_with_op_type (#990)
* Nuke `to_mem_table_with_op_type`

Rather than annotating rows with `__op_type` during `eval_incr` of selects,
partition the rows before evaluation, then merge after.

* Add historical comment.

Co-authored-by: Mazdak Farrokhzad <twingoow@gmail.com>
Signed-off-by: Phoebe Goldman <phoebe@goldman-tribe.org>

* Remove `_replaced_source_id`

---------

Signed-off-by: Phoebe Goldman <phoebe@goldman-tribe.org>
Co-authored-by: Mazdak Farrokhzad <twingoow@gmail.com>
2024-03-18 21:09:35 +00:00
Mazdak Farrokhzad da1baaa5fd perf(933): Clone bsatn instead of product values in incremental update (#951)
* eval_updates: use map entry apis

* dedup logic in remove_subscription + use entry api to hash only once

* stop cloning PVs in eval_updates

* address Phoebe's comments

* add tracing for perf testing

---------

Co-authored-by: joshua-spacetime <josh@clockworklabs.io>
2024-03-16 02:08:02 +00:00