1266 Commits (b65fb6041ab720295b1af7546bee3f4ff6903381)

Author SHA1 Message Date
Sayan Nandan 31d4cbb34d
Enable login and add login tests 3 years ago
Sayan Nandan 2fc77e0393
Use smaller size for random bytes
A sample space of 40 provides enough randomness so that the
likelihood of two tokens being the same is almost entirely
ruled out. And even if they are, it shouldn't be a problem
since they correspond to different accounts, although the
possibility itself is as good as impossible due to the
possible number of permutations being 8.560685103E+94, so
we can safely ignore this "risk".

40 is a sensible balance between what clients have to send
and the level of security we're expecting to provide, than
64 bytes.
3 years ago
Sayan Nandan c8ccfca09b
Implement `AuthProvider` 3 years ago
Sayan Nandan 3a6083b3f1
Add `AuthProvider` definition 3 years ago
Sayan Nandan 7285d63908
Simplify `Once` implementation 3 years ago
Sayan Nandan 6ed994fe19
Add `Once` implementation 3 years ago
Sayan Nandan 53d4c2b529
Use `TcpBackoff` in `SslListener` as well 3 years ago
Sayan Nandan d2e297e367
Use dedicated backoff algorithm for busy loops
Also use `util::exit_error` whenever possible to reduce
duplication.
3 years ago
Sayan Nandan 57f05e9788
Simplify TCP backoff impl 3 years ago
Sayan Nandan 96f817d31e
Simplify `resp` impls
The `RespCode` impl is no longer used, so it was removed.
3 years ago
Sayan e9620d0a8c
Release 0.7.3 (#238)
* Bump version

* Upgrade deps
3 years ago
Sayan Nandan 49fae295d1
Simplify termination signal handling
Yeah, signal handling is not one of the best things to do, and it
definitely is one of the messiest things to do. This commit
simplifies the way we handle "termination signals" which can be
SIGTERM or SIGINT on POSIX-compliant systems or can be Ctrl+C
or Ctrl+Break on Windows systems; whenever we receive any of these,
we'll attempt to terminate the database server.

Now, instead of waiting for multiple futures to complete, we create
a different `TerminationSignal` type that is a `Future`, which on
polling checks whether either of the signals have been received
or closed. We return the poll state for either.
3 years ago
Sayan Nandan ed66e4f291
Decrement threshold on first call 3 years ago
Sayan Nandan 0b87452b97
Listen to SIGTERM while in save-on-termsig retry loop 3 years ago
Sayan Nandan 2d6d776edc
Cleanup code and ensure strong_count of `Corestore` is 1
I suppressed some lints, but all of them will be removed very
soon. (use a TODO finder or something to see what all need to
be removed)
3 years ago
Sayan Nandan 33b0693fcb
Fix infinite loop on save failure during termination 3 years ago
Sayan Nandan 9b296cbf9b
Bump version 3 years ago
Sayan Nandan c961548b01
Upgrade deps and bump version 3 years ago
Sayan Nandan e9369a40ef
Simplify recipes 3 years ago
Sayan Nandan 0b54ea1cb3
Bump up version 3 years ago
Sayan Nandan b52f0d42ca
Fix tests
Also remove certs that were incorrectly added
3 years ago
Sayan Nandan 2340a0239e
Add tests for list's range 3 years ago
Sayan Nandan 4186eda627
Add range to lists 3 years ago
Sayan Nandan 84134ed240
Remove `upgrade` subcommand and log on restore
The `upgrade` subcommand from `skyd` which was removed in 0.7, but was
erroneously accepted in the CLI parameters has been removed. This
was silently ignored.
3 years ago
Sayan Nandan 36b02e9099
Fix backup restoration and simplify `arbiter::run` 3 years ago
Sayan Nandan d550e0d7a7
Expect `noart` in production mode
This might make one think that we are being outrageously strict,
but at the end of the day, it can help investigate crashes
or inspect logs without artwork all over the place.

Following some discussions, the `user` mode was renamed to `dev`
mode.

This commit also upgrades some deps, other than clap which has
deprecated yaml support (we will continue to use 2.x).

Finally, the CHANGELOG was updated.
3 years ago
Sayan Nandan 46c048f855
Fix rlimit check on Windows
Windows (obviously) doesn't have libc's rlimit so simply avoid
any references to it
3 years ago
Sayan Nandan d121fa96fb
Enable config evaluation for prod mode 3 years ago
Sayan Nandan 0d2a143e12
Fix warningstack_fmt test 3 years ago
Sayan Nandan d2d96e745e
Improve maxcon diagnostic 3 years ago
Sayan Nandan 481509d927
Fix rlimit impl for 32-bit 3 years ago
Sayan Nandan 6b54217fb2
Add production-mode setting evaluation 3 years ago
Sayan Nandan 4325cf9065
Add method to check number of open files on unix-based systems 3 years ago
Sayan Nandan 857e05529a
Add CLI config tests and improve diagnostic tests 3 years ago
Sayan Nandan 59a67ba0c5
Add cfg file tests 3 years ago
Sayan Nandan 53218ee98a
Add tests for types that implement `TryFromConfigSource` 3 years ago
Sayan Nandan 647d6ce05c
Add tests for config impl 3 years ago
Sayan Nandan ce7d7bef25
Fix config change checks and error messages 3 years ago
Sayan Nandan 86b9ac3dee
Switch to using new config framework 3 years ago
Sayan Nandan b46a5ac13f
Add method for chaining configuration sets 3 years ago
Sayan Nandan d820ef910d
Add config file impl using new config impl 3 years ago
Sayan Nandan afcd8031c2
Fix missing checks for server.noart and server.maxcon for CLI config 3 years ago
Sayan Nandan a48b3fd423
Rewrite CLI config using new config impl 3 years ago
Sayan Nandan 3861a32c2e
Rewrite `cfgenv` using new config impl 3 years ago
Sayan Nandan d46d73301b
Add config impls for `bgsave`, `snapshot` and `ssl` 3 years ago
Sayan Nandan 09afcd3e74
Add new config impl for server section 3 years ago
Sayan Nandan bd56ee2db5
Add `FeedbackStack`, `ErrorStack` and `WarningStack` 3 years ago
Sayan Nandan 0b1ed6af6e
Add `ErrorStack` definition 3 years ago
Sayan Nandan 85e789a1ee
Upgrade deps 3 years ago
Sayan 2cdabfc43e
Automatically package Debian packages on release (#235)
* Add debian package generation

* Install cargo-deb on `make deb`

* Reload systemd daemon on postinst

* Add auto upload for Debian packages

* Consider using runner.os for simplicity
3 years ago
Sayan Nandan 88a8095f42
Upgrade deps 3 years ago
Sayan Nandan c68d3ea3f4
Upgrade deps
All deps except for `clap` has been upgraded. Due to the removal of
the `args` field in `ArgMatches` in v3, and our dependence on the
field, we cannot upgrade to the latest version.

A PR has been created and once it is merged or a workaround
suggested, we can upgrade. (see clap-rs/clap#3265)
3 years ago
Sayan Nandan 1c16e43d3d
Upgrade deps 3 years ago
Sayan Nandan 7c9058a02e
Upgrade deps 3 years ago
Sayan Nandan 6800b5eb0a
Use native endian for testing
Add changelog
3 years ago
Sayan Nandan 87f260d6b2
Support writing in native endian 3 years ago
Sayan Nandan c0497e4339
Support reading data from a different endian 3 years ago
Sayan Nandan 50eb183f46
Upgrade deps 3 years ago
Sayan Nandan 93d1004c80
Add changelog and switch to using rustc edition 2021 3 years ago
Sayan Nandan 769378f7ce
Fix tests for `whereami` 3 years ago
Sayan Nandan 1deac63fb9
Use typed non-null array for `whereami` 3 years ago
Sayan 76f493753b
Add the `whereami` action (#232)
* Move macros into module

* Add the `whereami` action to identify the current entity

* Show entity group in the skysh prompt

* Add tests and actiondoc for `whereami`

* Add changelog entry

* Upgrade deps
3 years ago
Sayan Nandan ce8b6e2340
Disable caching on ARM64 CI
Caching only adds latency to the entire workflow, so we'll disable
it until GitHub fixes the issue with their caching on IPv6.
3 years ago
Sayan Nandan b63d90fa58
Add benches for skyd::protocol
This was added under the 'nightly' feature gate
3 years ago
Sayan Nandan 9656d7d9f6
Upgrade deps
Also added changelog entry
3 years ago
Sayan Nandan cac9a9225f
Add a sanity test for errors in pipelines 3 years ago
Sayan Nandan 048e79df2c
Fix pipeline impl and add basic pipeline tests
The pipeline impl had a bug which caused a parse error; this happened
because we directly wrote the length as an integer (with the tsymbol)
when we were supposed to only write the integer in its string form
to the stream. This was fixed.

Also, some preliminary tests were added for pipelines.
3 years ago
Sayan Nandan 12db246725
Implement basic pipelines
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 9b132f4351
Upgrade deps
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 2814bdb151
Bump up version to 0.7.1
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 90276e3ead
Upgrade deps
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 18a0f557a0
Merge branch 'config/env' into next 3 years ago
Sayan Nandan 374ba57133
Add support for environment variable configuration
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 2387103c5c
Fix missing check for durations in config
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 468b1460e4
Fix conflict check tests
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan ef652befc9
Add env var `ConfigError` variant and rename ident
The `ParsedConfig` struct was renamed to `ConfigurationSet` because it
is more clear in contexts as parsing can be an ambiguous term in several
places.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 29a154f70e
Add tests for configuration conflict
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan f56610123e
Fix check of host and port values in config file
43bef62a incorrectly dismissed the check for host/port config in the
case of a non-TLS setup. This commit fixes that.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 9a6bf82408
Simplify configuration handling
The previous configuration handling was rather messed up,
which however is something that this commit attempts to
simplify.

The check for configuration conflict was resolved with a far
more feasible approach and the handling of CLI/config file
configuration was also simplified greatly.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 43bef62a9e
Simplify config generation from cfg file
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 788b3073c0
Remove unnecessary use of `Box`
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan b5a0e02091
Move config file de into module
This really helps us reduce the grand clutter we created earlier.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan a43e1183b3 Bump up version 3 years ago
Sayan Nandan eb037fcd62 Add basic `env` config module 3 years ago
Sayan Nandan 4dbcce6e04 Upgrade deps 3 years ago
Sayan Nandan f85effc1c0 Fix empty list tests 3 years ago
Sayan Nandan 2ee227a5dc Add `lget last` and `lget first` tests 3 years ago
Sayan Nandan b368db2407 Add methods `FIRST` and `LAST` 3 years ago
Sayan Nandan b9c60b4cc7 Use ptr offsets for accesses to reduce bloat 3 years ago
Sayan Nandan ee78f9b1ce Avoid excessive const inlining
Also removed unnecessary assembly bloat resulting from the generic index
accesses through (unck get)
3 years ago
Sayan Nandan c3d977c703 Simplify `lmod clear` return 3 years ago
Sayan Nandan a41fd7fa7f Fix `lmod` bug resulting in return of wrong rcode 3 years ago
Sayan Nandan c34f241f2e Fix encoding check in list actions 3 years ago
Sayan Nandan c5a58dec3d Fix `is_empty` impl for `AnyArrayIter`
The impl was erroneously checking the base boxed slice for its length
when what we actually needed was the iter len (remainder).
3 years ago
Sayan Nandan e1ee9314f5 Add `is_empty` to `AnyArrayIter` for specificity 3 years ago
Sayan Nandan b34d059cd5 Add `Sync` trait bounds for ease with manual afns 3 years ago
Sayan Nandan f6b3f8dc5c Simplify encoding checks across actions
This commit also removes the forceful `__private` module naming for the
`dbtest` proc macro. Supplied modules can now have any name.
3 years ago
Sayan Nandan c298f55b23 Use primitive casts to reduce jumps 3 years ago
Sayan Nandan f4fbdcae16 Fix encoding check correctness in actions 3 years ago
Sayan Nandan 6fe3f53aa9 Use ptr offsets instead of index 3 years ago
Sayan 947327f379
Simplify response writing/handling (#222)
* Use `BoolTable` to simplify resps

* Fix inversion of table

* Use BLUT and NLUT wherever possible
3 years ago
Sayan Nandan 48ff6003af Remove `keylen` and add `exists` and `del` tests
`keylen` checks the length of value for a given key. This cannot work
with listmaps
3 years ago
Sayan Nandan b930c5d31b Add listmap compatibility to `keylen` and `lskeys` 3 years ago
Sayan Nandan 68b9c9b81f Add listmap compatibility with `exists` 3 years ago
Sayan Nandan 8ba3cb8028 Add `del` compatibility with listmaps 3 years ago
Sayan Nandan ca77ca9f80 Add sanity tests for wrong-model error string 3 years ago
Sayan Nandan 7246b14115 Add `lmod insert` tests 3 years ago
Sayan Nandan ed01c2fa82 Add `lmod remove` tests and fix `lget` tests
The error string length was incorrectly set causing the `lget` test to
fail
3 years ago
Sayan Nandan d0ee66ac4c Add remaining `lget` tests and add `lmod` tests 3 years ago
Sayan Nandan ce99e974b9 Fix array extend impl ptr eq check
The end of allocation is reached when curptr > endptr
3 years ago
Sayan Nandan acef265b04 Fix list tests 3 years ago
Sayan Nandan 8d43a70bd2 Add `lget` and `lset` tests 3 years ago
Sayan Nandan 677c4a844a Merge branch 'model/impl-lists' into next 3 years ago
Sayan Nandan 9b4b140af7 Add listmap on-disk storage tests 3 years ago
Sayan Nandan 41a49aaf11 Add `POP` subaction to `lmod` 3 years ago
Sayan Nandan 9a2622c2ad Add `insert` subaction to `lmod` 3 years ago
Sayan Nandan 02628d6ff3 Add `REMOVE` subaction to `lmod` 3 years ago
Sayan Nandan c66206b9eb Add `PUSH` subaction to `lmod` 3 years ago
Sayan Nandan 0278f6063d Add `lmod` and `CLEAR` subaction 3 years ago
Sayan Nandan 5238298ac4 Add `VALUEAT` and `LIMIT` subactions to `lget` 3 years ago
Sayan Nandan 0e8d60df0a Add `lget` for getting all list elements and len 3 years ago
Sayan Nandan a04f676aa5 Add `lset` for list creation 3 years ago
Sayan Nandan 26ed51a077 Simplify modelcode computation 3 years ago
Sayan Nandan 3fc9967bf2 Add modelcode tests 3 years ago
Sayan Nandan 7a8a22c04a Prevent usage of lists as a key type 3 years ago
Sayan Nandan 55457cf097 Add DDL support for listmaps 3 years ago
Sayan Nandan 47ace776a4 Fix tests 3 years ago
Sayan Nandan 4e68c4bd49 Add listmap se/de support in storage engine 3 years ago
Sayan Nandan 0ee5f69d50 Add basic listmap support 3 years ago
Sayan Nandan cdbe1a81eb Add more listmap corruption tests 3 years ago
Sayan Nandan ff59627e95 Add encoding tests for mutating KVE actions 3 years ago
Sayan Nandan 8c95ef0049 Upgrade deps 3 years ago
Sayan Nandan 3e4bc1e6fc Add remove method 3 years ago
Sayan Nandan ef3e617147 Add basic listmap definition 3 years ago
Sayan Nandan 2c2e5f0ea6 Add listmap bytemarks 3 years ago
Sayan Nandan 234623a0cc Add corruption tests 3 years ago
Sayan Nandan c560cc68d8 Add multi-element listmap tests 3 years ago
Sayan Nandan b8c8cda1d6 Add tests for list-based maps 3 years ago
Sayan Nandan 21157b2797 Use `RawSliceIter` and `RawSliceIterBorrowed`
These iterators (if you'd call them) provide safe abstractions over raw
pointers, enabling us to easily use them in the storage engine, reducing
verbosity and redundancy.
3 years ago
Sayan Nandan ad403421d4 Fix storage engine bug for zero-sized map entries
gt was applicable here instead of ge, since for zero-sized elements, we
may have already reached the end of allocation.
3 years ago
Sayan Nandan 7dc17a0757 Fix de of empty lists or zero-sized elements 3 years ago
Sayan Nandan 6ad2793e76 Deconstruct se/de methods for lists 3 years ago
Sayan Nandan 08b7b7b821 Add list deserialization 3 years ago
Sayan Nandan 2154fba359 Add `raw_serialize_list` for list based maps 3 years ago
Sayan Nandan a1ea9c3111 Upgrade deps and document parser 3 years ago
Sayan Nandan 1dfaa0e4a0 Switch to using `next_unchecked` 3 years ago
Sayan Nandan 831d84d65e Fix forwarding of buffer before query execution
This has the ability to introduce UB because advancing the cursor might
invalidate the source pointers obtained by `protocol::Parser::parse()`
That's why we only forward the cursor after the query has been
executed. This is absolutely fine because even if another query
packet has been buffered, we will only forward by the amount we read
and not anything more.
3 years ago
Sayan Nandan f1cf7e8796 Reduce `memcpy`s in Skyhash protocol impl
This commit does an extreme amount of `unsafe` work to reduce the amount
of data that is copied around. Previously, we:
1. Copied in from the buffer
2. Copied again when we did a ptr::read

This changes that to:
1. Zero-copies for operations that can operate on borrowed values
(i.e values by ref like GET, KEYLEN, ..)
2. One copy for operations that need owned values

Overall, this may not immediately seem beneficial for small queries
(afterall, computer memory is very fast), but for large keys -- this can
make a very significant difference. However, a big difference can be noticed
in memory usage under heavy load (with as much as a tenfold drop in some
cases).

But to make this possible, we have to break free from Rust's borrowing
rules as we can't normally pass around refs easily. So, we just turn
everything into raw pointers and operate on them directly. This is why
we introduce a significant amount of unsafe code.
3 years ago
Sayan 111d50b75e
Release v0.7.0 (#210)
* Simplify query gen in sky-bench and bump versions

* Upgrade to the latest driver version
3 years ago
Sayan Nandan cdc33b349e Fix wrong arg length being silently ignored
Where actions were supposed to report an action error, they silently ran
their significant part, ignoring the rest. This was fixed in:
- `DROP TABLE`
- `INSPECT KEYSPACES`
- `INSPECT KEYSPACE <ksid>`
- `INSPECT TABLE <entity>`
- `USE <entity>`

Tests for the same were added
3 years ago
Sayan Nandan 4ef28ea7e8 Upgrade deps 3 years ago
Sayan Nandan 76e0cf607c Switch `MPOP` to returning a `Typed Array`
This makes its behavior similar to that of the other mutating actions.
3 years ago
Sayan Nandan d744eaa2f6 Fix `HEYA` impl and add `HEYA` actiondoc
Also added heya echo test
3 years ago
Sayan Nandan c45bfd03c8 Fix critical bug in flush routine
When a new instance is created, we need to:
1. Create the tree
This ONLY creates the directories
2. Create the PRELOAD
This is critical because this is our check for a new instance
3. Flush the tables
This is important because we have never flushed the tables/ks before.
If we don't do this -- the server would fail to start with a
`directory not found` error.
3 years ago
Sayan Nandan 3bd34ae5c9 Merge branch 'model/tsymbol' into next 3 years ago
Sayan Nandan d7ac4ebe56 Fix inspect tests 3 years ago
Sayan Nandan a24e03da60 Use `TypedArray`s in inspect commands 3 years ago
Sayan 596b593526
Fix detection of invalid container name (#207)
* Fix parser allowing `$` in container name

* Fix query engine tests
3 years ago
Sayan Nandan 95504a8be6 Fix `FlatArrayWriter` impl and `mpop` tests
Update driver version
3 years ago
Sayan Nandan 2ed3335a1e Upgrade all interfaces to use the latest driver
Fix lskeys impl
3 years ago
Sayan Nandan e389ee7860 Simplify encoding checks across actions
Checking all encoding errors beforehand simplifies a lot of things for
us. At the same time, this saves a lot of bandwidth as we don't have to
write encoding errors for each element -- instead we just write one.
3 years ago
Sayan Nandan 3a6c48727b Upgrade all actions to use typed arrays 3 years ago
Sayan Nandan f7d64689a6 Use `TypedArrayWriter` for typed Skyhash arrays 3 years ago
Sayan Nandan 0d2cfc661c Use tsymbol to determine if binary or unicode
This enables clients to know whether they should expect binary data or
an unicode string.
3 years ago
Sayan Nandan dd12ea599e Take values by ref in `KVEngine` impl methods 3 years ago
Sayan Nandan ec10d3f962 Fix `pop` and `mpop` tests 3 years ago
Sayan Nandan fa2a4c2611 Add the `mpop` action and update the `pop` action 3 years ago
Sayan Nandan 1092bdfd65 Merge pull request #198 from skytable/storage/snapshotengine 3 years ago
Sayan Nandan 27a5562651 Don't panic on unimplemented pipeline query type
The return for inpsect table queries for Keymap model tables was fixed
3 years ago
Sayan Nandan 4ba70aa19b Remove ser/de implementations
These impls are no longer needed
3 years ago
Sayan Nandan 42f3251d2c Upgrade deps
Also added docs for Skymap
3 years ago
Sayan Nandan da8462eda3 Switch hasher implementation 3 years ago
Sayan Nandan 153f940ff6 Merge branch 'memory/improve-cmap' into next 3 years ago
Sayan Nandan c17e44ddf7 Fix Skymap borrowed iter impl 3 years ago
Sayan Nandan 9da0cdafee Upgrade interfaces to use Skymap 3 years ago
Sayan Nandan 3759992cf8 Add iterators 3 years ago
Sayan Nandan 7498add90c Add get, get_mut and entry methods to Skymap 3 years ago
Aaron Hill 28133ddc5f
Remove trailing semicolons from macros (#201)
This fixes warnings on the latest nightly.
See https://github.com/rust-lang/rust/issues/79813
3 years ago
Sayan Nandan db60133dc3 Add basic Skymap methods 3 years ago
Sayan Nandan bb19d024ea Ignore errors in run loop
This fixes CVE-2021-37625
3 years ago
Sayan Nandan 8b7de7173e Use flocks for pid file to enable auto release
This can help in situations where the process is forcefully terminated.
3 years ago
Sayan Nandan 891f9a2e06 Remove unused deps
Also simplified new instance check
3 years ago
Sayan Nandan 5a0d3017a5 Support non-interactive TLS passphrase input 3 years ago
Sayan Nandan d54652c21e Fix config not parsing `false` in ssl.only key 3 years ago
Sayan Nandan bb14b62805 Reduce disk accesses with a trip switch 3 years ago
Sayan Nandan 0d3bfe486e Use specialized result type for strong actions 3 years ago
Sayan Nandan 252dd9c08d Add supdate concurrency tests
Also added changelog entry
3 years ago
Sayan Nandan 39856cdfd5 Add sset concurrency tests 3 years ago
Sayan Nandan a8b716c892 Add sdel concurrency tests 3 years ago
Sayan Nandan 62b58f1a9f Decompose strong actions' snapshotting core 3 years ago
Sayan Nandan b47fcc2c88 Use snapshot isolation for strong actions
This makes strong actions far more reliable than the previous
implementation.
3 years ago
Sayan Nandan 2d5d32216c Add some general borrow optimizations 3 years ago
Sayan b6fcb4c035
Add `drop keyspace <name> force` (#192)
* Add forceful dropping of keyspaces

This commit also improves the reliability of `drop keyspace` in general

* Add changelog

* Add tests for `force_drop_keyspace`

* Upgrade deps
3 years ago
Sayan Nandan e32b3e8ea1 Destructure methods in `BorrowedEntityGroup` 3 years ago
Sayan Nandan 69df98c69a Only copy into `ObjectID` for `create table` 3 years ago
Sayan Nandan 3f3f381c50 Avoid copies into `ObjectID` 3 years ago
Sayan Nandan 133400b846 Only run mutating DDL queries if state is okay 3 years ago
Sayan Nandan ee14656354 Use volatile tables for tests 3 years ago
Sayan Nandan 49fa843eb2 Parse the `swapks` header if it is provided 3 years ago
Sayan Nandan f06e9ccdb5 Add FQE tests for flushdb 3 years ago
Sayan Nandan abcb60463f Add tests for `inspect` 3 years ago
Sayan Nandan 6924524c4e Add ddl tests 3 years ago
Sayan Nandan c5e4de9538 Fix lskeys and add tests for entity based queries 3 years ago
Sayan Nandan bc9abd7ac3 Enable `lskeys` to accept entities 3 years ago
Sayan Nandan 32fcbc2075 Add changelog and bump up version 3 years ago
Sayan Nandan c1249ccbf9 Prevent abuse of `system` table 3 years ago
Sayan Nandan fed4597208 Parse volatile property from DDL queries 3 years ago
Sayan Nandan c9e55451f3 Add inspection queries
This lets the user explore a keyspace/table.
3 years ago
Sayan Nandan c36cbe69e4 Remove `HTable`
Our entire storage infrastructure has changed and this is no longer
needed.
3 years ago
Sayan Nandan 0a670a6555 Remove compat
We'll be shipping a migration tool, so this isn't required anymore.
3 years ago
Sayan Nandan fb07d385fd Support entity groups in `flushdb` and `dbsize` 3 years ago
Sayan Nandan 1025933cfb Run tests parallelly in the `testsuite` keyspace
This saves us time and simplifies things. A lot.
3 years ago
Sayan Nandan 728c71f84f Fix SE tests 3 years ago
Sayan Nandan 28f825910e Fix tests and strong actions 3 years ago
Sayan Nandan d43c3dc1cf Fix storage engine tests 3 years ago
Sayan Nandan a6fc09f990 Enable entity group based table deletion 3 years ago
Sayan Nandan 8e71ef2a01 Fix tests 3 years ago
Sayan Nandan 2f39e6808b Enable entity group based table creation 3 years ago
Sayan Nandan 5402028b26 Add `use keyspace` and `use keyspace:table` 3 years ago
Sayan Nandan 2f7a2d546b Add branch hints to parser 3 years ago
Sayan Nandan 6eaf580ac8 Add entity group parsing 3 years ago
Sayan Nandan 3249fcb347 Add `drop table` and `drop keyspace` queries 3 years ago
Sayan Nandan d6e8db7d8f Add `create table` and `create keyspace` queries 3 years ago
Sayan Nandan c1064a7cd1 Implement and upgrade to `Corestore` 3 years ago
Sayan Nandan a5f735e977 Add `drop table` and `drop keyspace` 3 years ago
Sayan Nandan 608e008a65 Add `create table` and `create keyspace` 3 years ago
Sayan Nandan 5bab0fb91b Use global flush lock to coordinate disk access 3 years ago
Sayan Nandan 6e17ef6d5e Add system keyspace and remove `_system` table 3 years ago
Sayan Nandan 16ac791ff5 Add flush methods for snapshots 3 years ago
Sayan Nandan 03518c22c3 Add corestore impl 3 years ago
Sayan Nandan 421ff19405 Use registry for handling global state 3 years ago
Sayan Nandan 0e88d76444 Simplify hints 3 years ago
Sayan Nandan d1f6916251 Make mksnap use `action!` and simplify `IoResult` 3 years ago
Sayan Nandan c9545a30f1 Do not panic on unknown data type 3 years ago
Sayan Nandan 327953dce0 Fix qe returning full resp packet instead of group 3 years ago
Sayan Nandan 9535975d03 Create the dir tree if the instance is new 3 years ago
Sayan Nandan b2c0b9ecf2 Enable fixed len mutable params in `action!` macro 3 years ago
Sayan Nandan 589ef85e2c Simplify action impls with `action!` macro 3 years ago
Sayan Nandan 66c9822f5d Add routines to unflush an entire `Memstore` 3 years ago
Sayan Nandan a919b1c934 Add tests for flush and unflush routines 3 years ago
Sayan Nandan 454704574b Fix flush routines 3 years ago
Sayan Nandan 2393efb590 Encode model bytemark into `PARTMAP` 3 years ago
Sayan Nandan 610144f78e Add unflush routines 3 years ago
Sayan Nandan 6baa61176f Add volatility tests 3 years ago
Sayan Nandan 66b9ac27af Write storage type into PARTMAP
This commit adds a storage_type segment to the PARTMAP disk file. This
contains information about the storage type of the table.
Is it volatile? Is it persistent? 8-bits were added for future
improvements.
3 years ago
Sayan Nandan 1d403c0d1a Add flush routines 3 years ago
Sayan Nandan e89417cbc6 Fix preload generation and add preload decoding 3 years ago
Sayan Nandan 87d79650ce Add preload generation 3 years ago
Sayan Nandan bca8df5863 Add methods to create directory tree 3 years ago
Sayan Nandan 058b1ef1c6 Replace ns with ks 3 years ago
Sayan Nandan ad48e5478c Add `Integer64BufferRaw` and use it in `resp` 3 years ago
Sayan Nandan 71ab845d02 Fix zeroed impl for `Array<T, N>` 3 years ago
Sayan Nandan 48e29b6ec6 Add `Integer32Buffer` for faster encoding/decoding 3 years ago
Sayan Nandan 5790e99a98 Fix filename generator and use LUT for 32-bit ints 3 years ago
Sayan Nandan ca55694904 And `interface` for fs 3 years ago
Sayan Nandan b162756f80 Avoid unnecessary referencing
Even though the compiler will do immediate derefs, let us be explicit.
3 years ago
Sayan Nandan 03a229104d Fix alignment and auto static lifetime causing UB 3 years ago
Sayan Nandan c24e83c0a7 Encode all sizes to little endian
This is very convenient for us and we will provide advanced byte
ordering only if our users demand for it.
3 years ago
Sayan Nandan e1dfa12ba4 Add runtime panic check on 32-bit or lower 3 years ago
Sayan Nandan 5adc269e11 Add endian info and pointer-width check
When a file created by a 64-bit system is read on a 16/32 bit system,
there may be a size overflow. If so, we should do a runtime panic.
3 years ago
Sayan Nandan 74a0592fbc Simplify transmutation
Also use smaller vectors for faster tests to avoid problems with
thread stack sizes on Windows.
3 years ago
Sayan Nandan c20302ef75 Add storage module for custom encoding/decoding 3 years ago
Sayan Nandan 7c835d03b3 Add NS/KS swap headers in protocol 3 years ago
Sayan Nandan 17d1c472b6 Use proc macro for uninit array magic
The proc macro does some magic to give us a const array with the full
size without having to manually write it. Magic!
3 years ago
Sayan Nandan fd3e06beda Fix array length check assertion 3 years ago
Sayan Nandan e5b0588cca Fix UB due to use of from_const_array 3 years ago
Sayan Nandan f4379d5688 Use Array[64] for NS/KS names
We limit the sizes of keyspaces/namespaces because very long names may
cause fs errors on some file systems.
3 years ago
Sayan Nandan 8faf653d2e Fix ser/de for `Coremap<Array, Array>` 3 years ago
Sayan Nandan bd679f9b79 Document `Array` and `IArray` 3 years ago
Sayan Nandan b997afe89a Fix push function in `Array` 3 years ago
Sayan Nandan 4a27f83e6b Impl `Send` and `Sync` for `Array` 3 years ago
Sayan Nandan 0067b7d1b7 Implement `Array` type
This allows us to have fixed size arrays right on the stack
3 years ago
Sayan Nandan 5ff045bd93 Impl deserialize for `IArray` 3 years ago
Sayan Nandan e25d13afff Add BP optimizations 3 years ago
Sayan Nandan 036b507de8 Impl Serialize for IArray 3 years ago
Sayan Nandan 4fe7aa7050 Add manip methods to `IArray` 3 years ago
Sayan Nandan 6c00ffae3b Add methods to add items to `IArray` 3 years ago
Sayan Nandan 3739aa54fd Add basic `IArray` impl 3 years ago
Sayan Nandan e3d749ac20 Add methods to drop keyspaces and tables 3 years ago
Sayan Nandan 845ef82060 Use static slices for responses 3 years ago
Sayan Nandan 26a22c3102 Add dtor tests for Lazy 3 years ago
Sayan Nandan a7e11cc281 Add methods to create ns, ks and tables 3 years ago
Sayan Nandan bbcbe0756b Add basic methods to memstore 3 years ago
Sayan Nandan 7ea890765d Correct kvengine defs and add custom `Lazy` type 3 years ago
Sayan Nandan 74126ec7cb Add variable width characters and failure test
This is just for sanity
3 years ago
Sayan Nandan 013be0058b Add emoji tests 3 years ago
Sayan Nandan 8749cfa134 Add memstore 3 years ago
Sayan Nandan c953b88695 Add test with bincode 3 years ago
Sayan Nandan b1383bf8c9 Add encoding evaluation in `KVEngine` 3 years ago
Sayan Nandan a276091726 Account for perl errors 3 years ago
Sayan Nandan 5f75df7109 Add some optimizations for unicode checks 3 years ago
Sayan Nandan ead3f62ded Add failure cases for unicode 3 years ago
Sayan Nandan bdfaf6ec4d Ensure that perl doesn't error 3 years ago
Sayan Nandan 5e4cd5be4b Use deterministic finite automaton for validation
A dual stream approach provides even more speed improvements
3 years ago
Sayan Nandan 8cfab3f7d3 Add convenience macros 3 years ago
Sayan Nandan efec980fa6 Add basic `BufferBlockReader` definition 3 years ago
Sayan Nandan bdc4b3483f Add basic `KVEngine` definition 3 years ago
Sayan 552d454940
Enable TLS port to be configured via CLI args (#186)
* Enable TLS port to be configured via CLI

* Add changelog entry
3 years ago
Sayan Nandan 141e39eee1 Use env var to determine TLS cert location 3 years ago
Sayan d43e6f41da
Use `QuickLock` instead of mutex (#185)
* Use our own lock instead of parking_lot::Mutex

* Account for spurious failures in cmpxchg weak

* Ignore send error because parent may have panicked

The parent thread may have already panicked, dropping the rx.
3 years ago
Sayan Nandan 3a363d18cb Simplify artwork [skip ci] 3 years ago
Sayan bae2b8354c
Release v0.6.3 (#184)
* Bump up version to 0.6.3

* Update changelog entry
3 years ago
Sayan 2d7b9d7667
Add automated tests for TLS (#183)
* Auto start with TLS

* Add automated tests for SSL

* Add cert generation script

* Use script to generate SSL cert
3 years ago
Sayan 864c6d461f
Enable maximum connections to be configured manually (#182)
* Enable maximum connections to be configured

* Add arbiter for handling server startup

* Add handling of maxcon for command-line args

* Add changelog entry
3 years ago
Sayan Nandan 79f657b462 Add more LLVM specific optimizations
Just to reduce LLVM bloat
3 years ago
Sayan e30d51a599
Release v0.6.2 (#180)
* Bump up version and add changelog entry

* Use separate cache object for release workflows
3 years ago
Sayan Nandan 0f06f7b26f Add some LLVM specific optims for O1 builds 3 years ago
Sayan d53a0cb505
Fix handling of SIGTERM on *nix (#178)
* Fix handling of SIGTERM on *nix

This is just for future extensibility

* Fix error codes

I have been silly enough to break error codes
3 years ago
Sayan 66e5d41302
Simplify overall locks (#176)
* Remove the need for TableLockStateGuard

The htable impl uses locks under the hood making external locks
redundant.

* Use atomics instead of rwlock for poisoned state

* Simplify snapshot locking
3 years ago
Sayan Nandan 2a2addfa6d Upgrade deps and add changelog entries 3 years ago
Sayan Nandan 0f1264d312 Decompose linearity tests and utils into modules
Also fixed license headers
3 years ago
Sayan Nandan a87478dcba Optimize dependencies 3 years ago
Sayan Nandan 76acde2f4f Fix missing action argument in setkeys macro 3 years ago
Sayan Nandan 26775924ac Add tests for pop 3 years ago
Sayan Nandan 57c957d4e7 Add `pop` action 3 years ago
Sayan cdae667cb0
Fix pid file creation (#170)
* Remove the pid file if runtime errors occur

* Clean up error handling and fix pid file creation

The pid file was being created before evaluating the args, now it may
happen that incorrect args or --help was passed: in that event, the pid
file remains created. This was also fixed, besides some refactoring.
3 years ago
Sayan ca9e482f47
Deter other processes from using the same data dir (#169)
* Deter other processes from using the same data dir

For more information, see #167

* Don't lock `pid_file`

Windows has mandatory locking so second instance won't be able to read
the PID of the other process. We'll just keep the file descriptor/handle
open
3 years ago
Sayan 7349e461e6
Try to auto recover the save operation on termination (#166)
This is very useful because it removes the need for user intervention in
the event save on termination fails. Say the save operation fails due to
'some bad daemon' changing the directory's perms. Now skyd reports this
error while trying to save upon termination. Our sysadmin now fixes the
perms issue. The previous design would force the sysadmin to _somehow_
foreground skyd and hit enter. That is silly. The new design just
attempts to do a save operation every 10 seconds. So in case the issue
is fixed, the save operation will recover on its own.

Why not exponential backoff?
That's because the issue can be fixed some long time later and we may
have reached a large backoff value so the save that could have succeeded
would have to wait for a long duration before it can do anything
meaningful.

This also fixes a bug that caused BGSAVE errors to be reported as info
class log entries.
3 years ago
Sayan 8df9901740
Upgrade deps and actiondoc (#165) 3 years ago
Sayan e553c5172b
Release v0.6.1 (#164)
* Explicitly fsync and relax CPU on snap busy-loop

This commit also switches to using global `VERSION` and `URL` statics
than defining it per-crate.

* Add changelog entry and bump up version

* Optimize `dbtest` macro and rm redundant allocs

* Upgrade deps
3 years ago
Sayan Nandan 0c33395a09 Add some general optimizations 3 years ago
Sayan 1bde8b197d
Fix file-locking on solaris (#162) 3 years ago
Sayan Nandan 72d871ed3f Upgrade deps 3 years ago
Sayan Nandan 1bec90baac Optimize `sset` and `sdel` implementations 3 years ago
Sayan Nandan 2eedb041bb Make `gen_constants_and_matches!` macro logical
This commit imporves the overall 'look' of the macro and makes it appear
more logical
3 years ago
Sayan Nandan 58830edc80 Use iterators for actions 3 years ago
Sayan Nandan a839137643 Move actions into an `actions` module
These are actions and shouldn't be called the `kvengine`.
3 years ago
Sayan Nandan f8ea4c33de ucase for ASCII only
This is a silly optimization but can be significantly faster for larger
action names. Also, since there are (should be) no UTF-8 characters in
the first argument, this is absolutely fine and sensible.
3 years ago
Sayan Nandan a68c42f720 Document missing instances of `unsafe` 3 years ago
Sayan 952c5caa86
Poison the database by default if snapshotting fails (#160)
* Stop accepting writes if snapshotting fails

This is an important consideration: if BGSAVE fails and poisons the
database, snapshotting can and should too. But this is debatable in some
parts. For example, users may configure snapshots to be on a network
file system (symlinked maybe) and this can fail.
Now in some cases, this failure 'may be acceptable'. This commit adds a
way to customize this behavior through the `failsafe` key in the
snapshots section of the cfg file and through the --stop-write-on-fail
option passed to `skyd` on startup. However, BGSAVE remains unchanged:
it will always poison the database if it fails. If the user doesn't want
this, they can simply disable BGSAVE.

* Add changelog
3 years ago
Sayan Nandan ac336ff821 Add missing changes in changelog
Use `pat` token instead of `path` in query engine
3 years ago
Sayan Nandan eea0f86c97 Upgrade skytable client driver version 3 years ago
Sayan 6c9a36d397
Improve compat to use storage formats for upgrades (#158) 3 years ago
Sayan Nandan 260b336bf6 Add tests for races and synchronized unlocks 3 years ago
Sayan a1320da52b
Migrate to using `Coremap` (#156)
* Upgrade all interfaces to use new HTable

* Document `HTable`
3 years ago
Sayan Nandan 966c2594bf Fix `lskeys` tests 3 years ago
Sayan Nandan b77b783064 Add tests for lskeys 3 years ago
Sayan Nandan ea7891fba7 Implement lskeys 3 years ago
Sayan Nandan 449da56308 Upgrade all interfaces to use new in-memory table 3 years ago
Sayan Nandan 975e953426 Add compat module for upgrading old files 3 years ago
Sayan Nandan c2a20d4476 Implement serialize/deserialize for `HTable` 3 years ago
Sayan Nandan a7f5d84ef4 Bump dependencies
Also use `tokio::join` in-place of `futures::join`
3 years ago
Sayan 790558d2c7
Improve reliability, simplicity and recoverability of BGSAVE (#153)
* Create a new file on writing to flock-ed file

This fix is a very important one in two ways. Say we have an user A.
They go ahead and launch skyd. skyd creates a data.bin file. Now A just
deletes the data.bin file for fun. Funny enough, this never causes flock
to error!
Why? Well because the descriptor/handle is still valid and was just
unlinked from the current directory. But this might seem silly since
the user exits with a 'successfully saved notice' only to find that the
file never existed and all of their data was lost. That's bad.
There's a hidden problem in our current approach too, apart from this.
Our writing process begins by truncating the old file and then writing
to it by placing the cursor at 0. Nice, but what if this operation just
crashes. So we lost the current data AND the old data. Not good.

This commit does a better thing: it creates a new temporary file, locks
it before writing and then flushes the current data to the temporary
file. Once that succeeds, it replaces the old data.bin file with the
newly created file.

This solves both the problems mentioned here for us:
1. No more of the silly error
2. If BGSAVE crashes in between, we can be sure that at least the last
data.bin file is in proper shape and not half truncated or so.

This commit further moves the background services into their
own module(s) for easy management.

* Fix CI scripts

Fixes:
1. Our custom runner (drone/.ci.yml) was modified to kill the skyd
process once done since this pipeline is not ephemeral.
2. GHA for some reason ignores any error in the test step and proceeds
to kill the skyd process without erroring. Since GHA runners are
ephemeral, we don't need to do this manually.
3 years ago
Sayan Nandan 85616544ef Ensure that the entire file is locked
Although this is barely documented, setting the nNumberOfBytesToLockLow
and nNumberOfBytesToLockHigh to MAXDWORD apparently locks the entire
file
3 years ago
Sayan Nandan 42ad5680ff Fix missing imports on Windows
I'm not on a Windows machine, so I don't get these errors reported!
3 years ago
Sayan Nandan 03e241902f Ensure that duplicated handle has same permissions
This is particularly relevant for Windows
3 years ago
Sayan Nandan ba53e5160b Use unlocks to ensure that file is readable 3 years ago
Sayan Nandan 76d184663a Add test for BGSAVE 3 years ago
Sayan Nandan d7cd1bfb70 Use different byte count for test
This test simply makes sure that the 0s written while truncating don't
reappear (they should never do)
3 years ago
Sayan Nandan 93ef949bac Manually unlock file after complete termination
The cloned flock might attempt to call the unlock but it is a cloned
descriptor!
3 years ago
Sayan Nandan 893cf1d741 Fix `FileLock::write` impl and make snaps blocking
This commit implements a tokio blocking task for mksnap and also fixes
FileLock's write method and adds a test for the same
3 years ago
Sayan Nandan b5865e500b Use Terminator for termination of all bg services
What we did in the old implementation was pure over-engineering.
We relied on CoreDB's `Drop` impl to terminate the background services.
Now this is absolutely unreliable due to the nature of async functions.
We also relied on the bgsave scheduler to release the lock upon exit
which is also unreliable because we left the service to the mercy of the
runtime. We spawned the task and didn't hold as much as a `JoinHandle`
to it. That's bad because the runtime can just abort these tasks which
may result in the lock never being released. Even though it is designed
to release the lock on Drop, the destructor may however not be called at
all.

This commit fixes all those issues by simplifying the entire impl to
use Terminator. Now the background save and snapshot services run
independently, in their own tasks. Whenever the user passes a SIGINT,
we tell everyone to quit. The listeners understand that this is the
last query they'll process and the background save tasks exit almost
immediately. But what if some data was modified by this last query...?

No worries, that is completely handled by main(). The lock that BGSAVE
leaves is immediately (almost) returned to main and main will attempt
to flush the data almost immediately. That's how we maintain reliability
3 years ago
Sayan Nandan 78e9441564 Spawn blocking I/O tasks on a dedicated thread 3 years ago
Sayan Nandan 7d1b44a57f The snapshot service had similar bugs that were
fixed
3 years ago
Sayan Nandan 5a7f17db14 Fix strong count calculation logic
See the added comment for more context
3 years ago
Sayan Nandan 5d4650712f Fix BGSAVE running right on service start
This fixes another flaw with the previous implementation: running BGSAVE
right when the service is started which causes unnecessary disk I/O
3 years ago
Sayan Nandan 77f4b6e7be Make BGSAVE optimistic and fix BGSAVE bugs
This commit ensures that BGSAVE is optimistic in doing what it is doing:
If BGSAVE fails once, it will immediately poison the table. Now let's
say that some amazing sysadmin managed to SSH into the server and was
able to fix the storage issue; BGSAVE would be able to succeed.
The current implementation was flawed: firstly it prevented that and
secondly even if it succeeded in running BGSAVE, the server would refuse
to accept writes. This commit fixes this behavior.
3 years ago
Sayan Nandan a61ab02cd9
Fix disk storage on termination (#151)
See #150 for more information
3 years ago
Sayan Nandan 3616793554 Update versioning and support information [skip ci] 3 years ago
Sayan Nandan 6b47279b1b Fix CI script and improve terminal artwork 3 years ago
Sayan Nandan f55fa85174 Upgrade server to use client driver's `RespCode`s 3 years ago
Sayan Nandan 57d2883218 Fix SSET not skipping action name 3 years ago
Sayan Nandan d9bd911768 Fix segfault due to not skipping the action name
All the strong actions operate on the raw vector of args and hence need
to skip the action name (which is the first argument just like shell
commands)
3 years ago
Sayan Nandan 75f46c9235 Fix DBSIZE writing header when already written 3 years ago
Sayan Nandan ba0a67a179 Fix queries returning full responses
They should return groups instead
3 years ago
Sayan Nandan 229a424f45 Fix mset and uset tests 3 years ago
Sayan Nandan 80fc9e5e9c Upgrade all tests to use the driver 3 years ago
Sayan Nandan e08cffd187 Fix MGET returning flat array
MGET returns a 'mixed outcome' with respcodes and strings
3 years ago
Sayan Nandan db68453eab MGET returns a flat array 3 years ago
Sayan Nandan 35755f8033 Fix ret of parse error instead of `NotEnough`
If we couldn't fetch the tsymbol, it means that the stream hasn't
buffered enough data.

Also tests were added to account for the same
3 years ago
Sayan Nandan 8bdf5f32de Use write_all to ensure all bytes are written 3 years ago
Sayan Nandan b523103e4f Remove dbg messages and fix queryengine lcase eval 3 years ago
Sayan Nandan 124caec193 Disable dead_code lint for 'prospective' modules 3 years ago
Sayan Nandan a730511a2f Remove redundant methods 3 years ago
Sayan Nandan 7b11047bfe Make sure result is used 3 years ago
Sayan Nandan 78067d15eb Upgrade all interfaces to use the Skyhash protocol 3 years ago
Sayan Nandan d6a3cc2acb Document the Skyhash deserializer 3 years ago
Sayan Nandan 6d1d5f7877 Fix metaframe parsing and add more tests 3 years ago
Sayan Nandan fc5c943693 Simplify ASCII digit conversion
checked_sub is too sophisticated to use for this; just check if it is an
ASCII digit by using the built-in method
3 years ago
Sayan Nandan 4eabd3fc26 Ensure there are bytes before doing anything 3 years ago
Sayan Nandan 00dbeceb1b Remove the size part of the metaline completely
The size part of the metaline is absolutely redundant as we're doing
double the work while reading the size and then the real thing.
Since sizes won't have escape codes, we can freely read upto the LF
3 years ago
Sayan Nandan a39d9bf4cf Implement parser for new protocol 3 years ago
Sayan Nandan 14bfe1fcd1 Add support for parsing arrays and nested arrays 3 years ago
Sayan Nandan 53cad270fc Add parsing for u64 and also check overflows 3 years ago
Sayan Nandan ad0fbffe32 Add data types and add parsing for strings 3 years ago
Sayan Nandan 60d7a1c173 Optimize will_cursor_give_char check 3 years ago
Sayan Nandan 3a1abda2cb Return NotEnough if nothing at current cursor
If Parser::will_cursor_give_char is set to not error if a char matches
or the next line is empty, return Ok(bool). If this_if_nothing_ahead is
set to false, then return a NotEnough error if no more chars are
available.

The newly added test explains why
3 years ago
Sayan Nandan 6d29e519c9 Fix read_sizeline returning wrong error
Also added more tests
3 years ago
Sayan Nandan daaf6968ba Verify if byte is LF before moving cursor 3 years ago
Sayan Nandan d91e696e24 Add more tests 3 years ago
Sayan Nandan 0bdbd81f92 Add a header magic
We add a header magic '0x0D' or the CR byte. This acts as a boundary
between multiple queries on the same connection
3 years ago
Sayan Nandan 88b4eb88a1 Make some idents public 3 years ago
Sayan Nandan 6dbe0fcfaa Add parsing for complete query 3 years ago
Sayan Nandan e07614d857 Rename function to reflect names in rest of mod 3 years ago
Sayan Nandan d22fec8036 Implement complete actiongroup parsing 3 years ago
Sayan Nandan 65f0e445a4 Pre-allocate capacity for the element 3 years ago
Sayan Nandan 2efe2ab213 Implement parsing of datagroup elements 3 years ago
Sayan Nandan 14e0ab2462 Rename functions appropriately 3 years ago
Sayan Nandan 773c82ac83 Add actiongroup size parsing 3 years ago
Sayan Nandan 2fed0e876b Implement metaframe parsing 3 years ago
Sayan Nandan 559af81ee9 Start impl of new parser and add sizeline parsing 3 years ago
Sayan Nandan 4265820fbd Don't raise error if there is more data 3 years ago
Sayan Nandan c9b2abfc96 Fix test 3 years ago
Sayan Nandan abb1b9bf33 Only discard part of buffer that was parsed 3 years ago
Sayan Nandan 74893c275e
Abstract HashMap into HTable (#146)
It is likely that we'll change the HashMap implementation in the future,
hence its best to hide away the HashMap to make sure we can easily
replace it.
3 years ago
Sayan Nandan d18631680c Bump up version and add changelog entry 3 years ago
Sayan Nandan 50273f324a Upgrade dependencies 3 years ago
Sayan Nandan f3e7a73b00 Fix trying to read dir instead of snapshot file
Also, migration support for the old snapshot directory was added
3 years ago
Sayan Nandan 90ee7baa8a Fix snapshot directory parsing logic
The previous logic was heavily flawed; it only had to check if the path
was a dir and isn't the remote snapshot directory.

Similarly, the file name parsing should only kick in if the item is a
file
3 years ago
Sayan Nandan 772e7b0b27 Fix restoring from snapshot and data file 3 years ago
Sayan Nandan 0b3dd9c129 Add backwards compat for old snapshot dirs 3 years ago
Sayan Nandan f013a90179 Change snapshot directory to data/snapshots 3 years ago
Sayan Nandan f60b3098da Change the data file path to data/data.bin
As a consequence, other methods were also upgraded
3 years ago
Sayan Nandan 3851f6d9ce
Remove redundant functions from mod `config` (#143) 3 years ago
Sayan Nandan ce466ebc22 Reacquire lock when runtime exits
This commit adds changes so that the main process almost immediately
acquires a lock on the data file when runtime is dropped. This is just
an added precaution to try and ensure that no other process does
something silly with the data file.

The descriptor is cloned for this using `FileLock::try_clone`
3 years ago
Sayan Nandan 74ce75d919 There is no need for block_on_process_exit
8e46e62 added a block_on_process_exit function that kept on sending
`notify_one()`s in a loop until the services terminated. This was
pointless as the `Drop` impl would do it for us anyways.
(What was I thinking?)

So, in main(), we're spawning an async task that lets the DB run as long
as we don't pass a ctrl_c (or some bad panic occurs). Once the ctrl_c
is received, we start terminating all workers. `block_on` returns DB
which should be the only one holding an atomic reference to the shared
field. We assert this right after dropping `runtime`.

Finally, the ECONNRESET suppression match was fixed to remove an
unreachable branch by adding conditional compilation
3 years ago
Sayan Nandan 8e46e62d3f Wait for all workers to drop and release flock(s)
This commit ensures that the workers exit before attempting a flush_db
operation. Only after block_on_process_exit finishes we return `db`.
Now we run a simple flush_db operation knowing that the lock has been
released.
To block on process termination, we introduce a new function
block_on_process_exit that does the same thing as CoreDB's Drop
implementation.
3 years ago
Sayan Nandan 7349f5261d Manually build rt and then block on dbnet::run 3 years ago
Sayan Nandan d9af302417 Don't use additional scope 3 years ago
Sayan Nandan fb503e2981 Fix trying to unlock `file` instead of `file2`
Silly me, `file` has already been unlocked
3 years ago
Sayan Nandan 1180de3b71 Ret FileLock from BGSave to unlock before flush_db 3 years ago
Sayan Nandan 5df31287da Use dedicated blocking osthread for unlocking file
This commit ensures that the file unlock operation is completed as soon
as bgsave returns and not in the future
3 years ago
Sayan Nandan 39ab1e7683 Log error that causes `flush_db` to fail 3 years ago
Sayan Nandan 07dd884f3c Upgrade deps and remove unused regex in cli
Closes #128, closes #129 and closes #132
3 years ago
Sayan Nandan 4354bfc0f9 Fix ECONNRESET errors on Windows
As discussed in #110, this commit suppresses ECONNRESET on Windows.
3 years ago
Sayan Nandan ea1381269b Don't use filename `con`
Windows is the most ingenious OS in the world where filenames can
conflict with shell commands. That's right, con is an I/O device on
Windows and cannot be used for a filename! This is why we were having
checkout errors on Windows!

Vive la POSIX!
3 years ago
Sayan Nandan e918dabf26 Use generic Connection replacing SSL/TCP variants
We have introduced a trait `BufferedSocketStream` that is a 'dummy'
trait and is implemented for both `SslStream<TcpStream>` and
`TcpStream`. So, the generic `Connection` object accepts any type that
implements the `BufferedSocketStream` trait (and hence should also
implement `AsyncWrite`)
3 years ago
Sayan Nandan 4ba5418120 Document `dbnet::con` 3 years ago
Sayan Nandan ef36351428 Refactor dbnet and protocol into logical modules 3 years ago
Sayan Nandan eb71335a62 Upgrade all functions to use generic connections
This commit does a LOT! It migrates the `queryengine::execute_simple`,
`CoreDB::execute_query` and the kvengine functions to use generic
connections.

The object dbnet::Con was removed because it isn't needed anymore.
The listeners were also upgraded to use the generic connection handler
3 years ago
Sayan Nandan c399ae1f1c Implement a generic con handler and rename traits
The trait `Con` and `ConOps` were renamed to `ProtocolConnectionExt`
and `ProtocolConnection`.

This naming scheme clearly explains that the Ext version 'augments' the
non-Ext impl. This is the very case here: ProtocolConnection provides
the basic funtions needed for interfacing with net I/O while the Ext
trait enables high-level interaction with the protocol and ultimately
queries.

A generic `ConnectionHandler` object was added that will replace the
SSL and non-SSL handler objects, again reducing redundancy.

Dummy execute functions were added to CoreDB and queryengine.
3 years ago
Sayan Nandan ba478b9f5a Add a generic implementation for a connection
This commit defines two traits: `Con` and `ConOps`. Implementors of
`ConOps` get a free implementation for `Con`. `Con` is the ultimate
object that can be used in place of the current SSL/non-SSL connection
objects. If you look at the implementations of the current connection
objects, they have a lot of repetition as they do almost the same thing
except for the fact that they have a different underlying stream.
This is exactly what we're trying to eliminate. We will also define a
generic connection handler object to reduce redundancy.
3 years ago
Sayan Nandan 9e11b8bcd0 Add note on how `dbtest` tests work 3 years ago
Sayan Nandan 2cbd35cbb5 Enable flocks on startup and shutdown
Several changes were made to accomodate for this, including the addition
of the write_to_disk function that should be used by fns which don't
have a FileLock to pass for flushing data to the disk.

BGSAVE now takes ownership of a FileLock object which it uses for
running BGSAVE.
3 years ago
Sayan Nandan fd23218809 Add test for Windows for duplicate unlock attempts 3 years ago
Sayan Nandan 02e57f5da0 Document `flock`s 3 years ago
Sayan Nandan 982b8e9a25 Use the unlocked field across all platforms
Initially added in 7777d1ee, this commit enables it for all platforms to
avoid an extra syscall
3 years ago
Sayan Nandan 7777d1ee96 Attempt to fix flocks on windows with unlock field
It seems that on Windows unlocking errors if the file has already been
unlocked. To fix this, we've added a platform-specific field to see if
the FileLock object has already been used to unlock the file.
This is the unlock field. In the Drop impl for Windows, we check the
unlocked flag to determine if we need to unlock the file.
3 years ago
Sayan Nandan 79a7cfd2c2 windows::um::fileapi::UnlockFile is an unsafe call 3 years ago
Sayan Nandan 8e45ef2427 Add test for flock that fails if lock is active 3 years ago
Sayan Nandan 46188f88db Fix missing import on Windows
As the linter doesn't show errors on non-Windows for the cfg(windows)
module, I happened to miss the std::fs::File import.
3 years ago
Sayan Nandan 6e680b33e5 Add native file locks for unix and windows systems
This commit implements file locks for unix-based systems and windows
systems. This is done by using platform-specific `__sys` modules for
locking, trying to lock and unlocking files.

A build script was added for unix-systems that make use of the
flock-posix.c file
3 years ago
Sayan Nandan aca9888109 Remove fscposix and begin adding native impls
This commit removes the fscposix.c file and begins implementing native
file locking mechanisms for each platform (supported platforms)

BSD-style `flock`s were added
3 years ago
Sayan Nandan bfb74200ec Use CoreDB::new_empty() instead of new for brevity 3 years ago
Sayan Nandan 8e41cab99a Re-compile fscposix.c if it changes 3 years ago
Sayan Nandan 2d7a03d279 Add basic test for file locks (POSIX) 3 years ago
Sayan Nandan bb9d98d63e Panic explicitly in the Drop impl if unlock fails
Also, the documentation was updated
3 years ago
Sayan Nandan 83911af208 Only run build.rs for fscposix.c on unix systems 3 years ago
Sayan Nandan a9710587bb Add advisory locking for POSIX systems
This commit adds a basic implementation of POSIX advisory record locking
which sets a lock on the `data.bin` file when the database server starts
and releases the lock when it terminates. This is just done for
compliance to let other processes know that we don't want them to use
the file.

However, the result depends entirely on the process that wants to do
'something' with the file. It is the responsibility of the process to
ensure that it respects the file lock.

Also, exclusive locks aren't perfect on Linux, so we can't rely on them.
See discussion #123 for more information.
3 years ago
Sayan Nandan 1be348f5a2 Upgrade deps
Closes #117, closes #118 and closes #121
3 years ago
Sayan Nandan 6710e90e40 Optimize sanity test implementation
Also, sanity tests for GET, SET and DEL were added and the error
handling was optimized along with some code formatting
3 years ago
Sayan Nandan 6a5163db6a Fix element length in pre-compiled resp data group
This fixes the element length for the MKSNAP disabled error
3 years ago
Sayan Nandan 5c0fdde44c
Make responses returned by `MKSNAP` static
This will avoid runtime generation of responses after the first `Deref`.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
3 years ago
Sayan Nandan 507215379f
Rem usize field in ParseResult::BadPacket variant
This variant is absolutely redundant as we're just ignoring the entire
buffer and not just a part of it

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan e10cc1411f
Upgrade deps and fix actiondoc script
Closes #111 and closes #112

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan e31c08dbb0
Fix outdated comments and ident naming
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 9df39187d1
Upgrade deps, add changelog entry and bump version
This closes #107, closes #108 and closes #109.

The configuration template was updated to include TLS/SSL and the
corresponding tests were also updated.

It also renames `sdb` to `skyd` for streamlining binary names.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 03f97d4ac8
Optimize some functions to reduce verbosity
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 151d2dd454
Upgrade deps
Closes #96, Closes #97, Closes #98, Closes #101, Closes #102
and Closes #103.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 5d98b3522e
Enable string escaping with quotes for skysh
This commit uses a Regex match iterator along with a few replace
operations to enable the parsing of quoted strings from arguments.

Previously, we simply ran a `split_whitespace()` to get the parts of the
ActionGroup, but now we're using this new Regex which enables arguments
like: 'SET me "sayan spaced"' to be passed and validated.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan e051a0376b
Improve `gen_match!` macro to use path matches
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 65681f38bb
Use `gen_match!` macro to simplify function calls
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 43779eb08e
And now we're Skytable
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 339844a613
Merge branch 'hotfix.1' into next
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 6a10f927c8
Upgrade deps
Closes #88, closes #89

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 56b958a9cf
Revise copyright blocks as per OSI guidelines
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 38b011273b
Add fix and tests for VE/S/00001
This commit now checks if the second value passed to MKSNAP points
to any parent/root directory before performing any action.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan a3398f1d07
Rebrand from TerrabaseDB to Skybase (#90)
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 7bf17a6374
Move tests in tdb/config to a separate module
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 37f2c6355d
Restore `iter.next()` call removed in 4dcb203359
This call is necessary as SUPDATE returns Nil even if one of the keys
don't exist.

Also, this was note added to the actiondoc.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 2c895cf143
Upgrade dependencies
This closes #86 and also closes #87.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 4dcb203359
Remove redundant call to `iter.next()` in SUPDATE
Just like fd139a9dda, this skip is not
needed as we're already breaking from the loop.

Also, all remaining unsafe blocks that were left in
2e85fbb831 have been explained.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan fd139a9dda
No need to skip next value in `SSET`
The skipping of the next value is absolutely unneeded as we're already
exiting the loop when the hash table contains the key.
Thus, this op was removed.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 2e85fbb831
Explain why some `unsafe` code blocks are safe
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 8736db1034
Code cleanup and added auto-sync with repo mirror
Dependencies were upgraded

A mirror sync badge was added. Also README was revised and workflow badge was fixed.

Signed-off-by: Sayan Nandan nandansayan@outlook.com
4 years ago
Sayan Nandan 8a54e8f85d
Remove `openssl-sys` as a dependency
`openssl-sys` isn't required anymore; it was added in the `ssl` branch
during the development phase.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 3a6b9b282f
Merge branch 'ssl' into next
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 4722e01d23
Add `ran_string()` to `tdb-bench`
Also, dependencies were upgraded across all crates and the version for
`tdb-macros` was streamlined to 0.5.0 like the other crates.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
dependabot[bot] 4db769c2d8 Bump bytes from 1.0.0 to 1.0.1
Bumps [bytes](https://github.com/tokio-rs/bytes) from 1.0.0 to 1.0.1.
- [Release notes](https://github.com/tokio-rs/bytes/releases)
- [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/bytes/compare/v1.0.0...v1.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
4 years ago
dependabot[bot] 4f039f45f5 Bump tokio from 1.0.1 to 1.0.2
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.0.1...tokio-1.0.2)

Signed-off-by: dependabot[bot] <support@github.com>
4 years ago
Sayan Nandan d3387b68d0
Fix erratic packet delivery times with `BufWriter`
The data was being delievered in different batches, which
caused problems. This commit replaces the current stream
writer with a buffered writer ensuring good delivery.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan e92a6eb8c1
Use `read_again()` to read from the `SslStream`
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 8c067d20a5
Fix writing to TCP socket instead of SSL socket
We were doing an extremely erroneous thing: writing to the TCP
socket instead of the SSL socket. This caused OpenSSL to report
problems on the client and server sides, telling us that there
was a problem with the SSL connection.

This commit revises the `write_lowlevel` trait impl for `SslStream` to
write to the SSL socket.

Also, the 'wrong' flushing of data for similar reasons has been fixed

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan c74259a488
Listen to futures in parallel with `join!`
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan d84234724d
Update to upstream changes and polish SSL API
Also several debug messages were added for debugging SSL connections.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
dependabot[bot] 43ee423c83 Bump serde from 1.0.118 to 1.0.119
Bumps [serde](https://github.com/serde-rs/serde) from 1.0.118 to 1.0.119.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](https://github.com/serde-rs/serde/compare/v1.0.118...v1.0.119)

Signed-off-by: dependabot[bot] <support@github.com>
4 years ago
dependabot[bot] c3d70ccbec Bump log from 0.4.11 to 0.4.13
Bumps [log](https://github.com/rust-lang/log) from 0.4.11 to 0.4.13.
- [Release notes](https://github.com/rust-lang/log/releases)
- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/log/compare/0.4.11...0.4.13)

Signed-off-by: dependabot[bot] <support@github.com>
4 years ago
dependabot[bot] bff95b9d27 Bump regex from 1.4.2 to 1.4.3
Bumps [regex](https://github.com/rust-lang/regex) from 1.4.2 to 1.4.3.
- [Release notes](https://github.com/rust-lang/regex/releases)
- [Changelog](https://github.com/rust-lang/regex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/regex/compare/1.4.2...1.4.3)

Signed-off-by: dependabot[bot] <support@github.com>
4 years ago
Sayan Nandan 07b9985732
Add client side SSL support
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 053be8c44a
Enable parallel handling of secure/insecure ports
Also, the imports were optimized.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 30c9f2991b
Enable query execution for secure connections
This commit enables queries to be executed on secure connections.
At the same time, the `execute_query_ssl` function was removed as
`execute_query` has been modified so that it can be used by both secure
and insecure connections

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 17860ef45a
Implement the `Multi` variant for `MultiListener`
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 68552b4d71
Enable TLS port to be set and impl `MultiListener`
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan b2e3d90799
Fix bug that suppressed unused cli flags warning
The cli.yaml file was also reformatted

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 442570a58b
Let SSL opts be read from the cfg file and cli
This commit enables SSL settings to be read from command-line arguments
and from the configuration file.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 61daf6c2e2
Add example on TLS configuration
Also, we've muted dead_code warning froms the compiler, temporarily.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 43ac93b47d
Fix kvengine tests
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan f2031129ce
Upgrade dependencies
Closes #59, closes #60, closes #61, closes #62, closes #63 and closes #64.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 25d211d0a2
Implement `Con<'_>` object for TLS/non-TLS streams
This object either holds a mutable reference to an unencrypted TCP
stream or an encrypted TLS stream (using OpenSSL). The action handlers
were modified as a consequence.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 43bb178954
Implement basic TLS module and connection handler
This commit implements 'TLS versions' of `CHandler` and `Listener` from
`dbnet`.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 0087d6b07c
Add basic SSL/TLS listener
This commit adds a basic SSL/TLS listener using `openssl`.
The `SslListener` object can accept a connection and get a decrypted
stream.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
dependabot[bot] 5d17e0a89d
Upgrade deps
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan a9bd9be988
Use `IntoBinaryData` for multi namespace ser-de
This makes sure that we can implement serialization for multiple types.

At the same time, we DON'T put in blanket implementations for this trait
as we want to make sure that unintended things don't get flushed.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan c83dbd0436
Improve error handling in snapstore
We've made the error handling slightly 'less aggressive' than the
previous version which `unwrap`ped here and there.

Also, the documentation for the entire snapstore module was greatly
improved.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 632a198ede
Implement multi-ns ser and de
This commit provides an implementation which allows multiple 'named'
namespaces to be serialized and deserialized.

No information about the data needs to be known for deserialization;
To facilitate this, a partition map is implemented which is stored as a
separate file. For now, the data file is called `snapstore.bin` and the
partition metadata file is called partmap.

The partition map (`PartMap`) contains a vector of `Partition` objects.
This object stores 'markers' (`len`) which are ideally byte positions
or offsets that demarcate the locations of the individual namespaces.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan f6b25ce48c
Don't clone when writing data to disk
Previously we were cloning data before writing to disk which
caused slowdowns and lead to higher memory usage. This is an
attempt to fix this behavior.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan b257b7286d
Further reduce the size of the docker image
Also the deps were upgraded (there's no point of dependabot creating
multiple commits for upgrading deps)

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 792351108d
Rollout 0.5.0
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan bfb4b920df
Bump up version and add changelog entry
Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 5ecc6f55f4
Drop the read lock to avoid perpetual waits
We previously made a big mistake: we tried to set poisoned to true, an
operation that requires a write lock, without dropping the read lock.
This commit ensures that we first drop `rlock` before doing anything
else. At the same time, if BGSAVE has failed, we'll just shut down the
service.

The error descriptions were improved for a failed `get_saved`
operation. And finally, a couple of variables in `MKSNAP` were renamed
to make them sound more sensible.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 106c5bc219
Use refs instead of cloning for pre-compiled resps
For this, `Writable` was implemented for `&'static [u8]`.
Although this won't have a very noticeable impact on performance, we
will stick to using references instead of cloning the data and then
referencing it again.

Along with this, the docs for MKSNAP were updated.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 76e6232242
Stop accepting writes if BGSAVE fails
Let's say that BGSAVE fails for some reason or the other. As it is
our responsibility to ensure the integrity of the user's data and
to enforce the reliability of the overall database, we should
immediately stop accepting writes, so that new changes aren't made
since the last time flushing data to the disk succeeded.

The functions under kvengine were modified as a consequence, and they
will return an "Internal Server Error" which is response code 5 if
the database is poisoned.

To put it in one line: If running BGSAVE fails, we'll `poison` the
in-memory table and stop accepting write operations, which ideally is
any operation that attempts to obtain a write lock.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 824944e30e
Don't use an explicit `enabled` flag in `snapshot`
There is no merit in having a redundant `enabled` key under
`snapshot` in the configuration file; if a `snapshot` key is present,
it is inherently obvious that snapshotting is enabled

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan b09beefe60
Don't check remote dir every time MKSNAP is called
Instead of checking to see if the remote snapshots directory exists
whenever MKSNAP is called, we'll create the directory when the server
starts up

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan a0fea2ee08
Enable remote snapshots even if disabled
Since creating snapshots is quite an important utility,
there may be scenarios where creating one may be needed,
even if it is disabled on the server side. This commit
enables such snapshots to be created. This is achieved by
enabling MKSNAP to accept two arguments, where a 'named'
snapshot can be created, which is our "special" snapshot.

All these "special" snapshots are stored in a separate
"snapshots/remote" dir that is ignored by the
`SnapshotEngine`.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 951880817b
Let snapshots and bgsave opts be set via cmd args
Following on from ab9561258e, we'll allow
the user to configure snapshots and BGSAVE via command-line arguments

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan ab9561258e
Enable command line configuration
Until now, the database server could only be configured via the
configuration file. This commit enables the host, port and noart
options to be configured via command-line arguments.

This is important as there may be scenarios where creating a file
presents a challenge to the user.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan cf3d213b3f
Enable data to be restored from a snapshot
The user can now run `tdb -r <snapshotname>` to restore data from the
snapshot. Also, we'll show a note in the logs when trying to restore from
a snapshot

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan f06f81cd5c
Remove the `CyanSFW` module
This module isn't doing anything good staying here, as it does nothing!
More work needs to be done on the file storage format internally before
a public rollout.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan ac37769b7a
Rollout v0.4.5
Also, the actiondoc for `MKSNAP` was updated and a changelog entry was
added for this release

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan bc1a6fd456
Upgrade tokio to 0.3.2
Upstream changes in tokio have required several changes.
For example, `delay_until` was renamed to `sleep_until`. Similarly,
`notify` was renamed to `notify_one`.
Also, in tdb-macros, the `runtime::Builder::new()` line was changed into
`runtime::Builder::new_multi_thread()` due to changes upstream

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 71e020db59
Ensure that duration values are not zero
If the duration for a periodic operation is set to zero in the
config file then it is likely that the thread would crash.
We want to prevent this at all costs, which is why
we're adding this check.

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 0ea02f846a
Add tests for MKSNAP and bump up version
We don't need tests for MKSNAP when it is enabled as we already have
tests for snapshotting in `diskstore::snapshot`

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan 11a9223e6b
Make MKSNAP return code 3 for `howmany != 0`
To streamline the actions we'll make sure that mksnap returns code 3
if an incorrect number of arguments are provided
The actiondoc for the `mksnap` action was added and the contributing
guide was also updated

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan a3c5135022
Provide `asyncdb` for `dbtest` macro functions
In `cli` other errors are now formatted in a `[ERR]` format
Also the documentation across the project was updated

Signed-off-by: Sayan Nandan <nandansayan@outlook.com>
4 years ago
Sayan Nandan f8fea34e18
Fix tests for snapshots not setting `SnapshotStatus`
Also upgrade syn from 1.0.46 to 1.0.48 (#31)
4 years ago
Sayan Nandan 4ce95c6d42
Make sure that only one snapshot is made at a time
`CoreDB` now has a `SnapshotStatus` object for this purpose
This object holds the current state of the service in an `RWLock`
When `mksnap` is called, `SnapEngine` sets `in_progress` to true
When the snapshot is created, `SnapEngine` sets `in_progress` to false
This prevents multiple entities from creating snapshots at the same time
4 years ago
Sayan Nandan 037064e8d9
Improve `Writable` impl for `terrapipe::RespCodes` 4 years ago
Sayan Nandan 6e27bd256f
Exit block if `SnapEngine` failed to initialize 4 years ago
Sayan Nandan 3b3d2c6994
Implement `mksnap` action 4 years ago
Sayan Nandan c31788754c
Enable module-level imports in `dbtest` proc macro
Also, the macro now unpacks the `__private` module into `super`
4 years ago
Sayan Nandan 980d47a3be
Improve `dbtest` macro docs 4 years ago
Sayan Nandan 5d499fa36d
Remove `testsuite` crate and decompose a few tests 4 years ago
Sayan Nandan 425afbe8c7
Fix lower bound for ports in dbtest compiler macro
Redundant test objects were also removed
4 years ago
Sayan Nandan 3d1dd04b0d
Improved testing to use custom compiler macros
Also, multi-threaded tests were re-enabled
4 years ago
Sayan Nandan 47831252b3
Fix the `dbtest` macro using a `#[test]` attribute
Also several misc. fixes were made to the `dbtest` compiler macro
The macro now creates a TcpListener and closes the socket once finished
4 years ago
Sayan 44cb12955d
Fix `tokio` version 4 years ago
Sayan Nandan 147f13a020
Rename `tdb-derive` to `tdb-macros`
The proc_macro can now be applied on modules only
All functions within the module will be considered to be a test
This has the advantage of not having to flag every test function
4 years ago
Sayan Nandan 8a8c4450bf
Add outline for `mksnap` action 4 years ago
Sayan Nandan 3ce9ea6eeb
Bump up version 4 years ago
Sayan Nandan cbe5c5767d
Improve test for `test_pre_existing_snapshots` 4 years ago
Sayan Nandan 945226f3d8
Add tests for existing snapshots 4 years ago
Sayan Nandan 87ef3f3ae2
Enable previous snapshots to be parsed 4 years ago
Sayan Nandan 441676ee13
Improve docs for background services 4 years ago
Sayan Nandan 62fe32f723
Enable automated snapshots 4 years ago
Sayan Nandan 9828c88a4f
Simplify `CoreDB::run_bgsave` to return a `bool` 4 years ago
Sayan Nandan 89ad505a52
Simplify the `BGSave` object by making it an enum 4 years ago
Sayan Nandan aa4714bded
Enable snapshots to be configured
The snapshots section in the config file can now be parsed
4 years ago
Sayan Nandan b30e71354d
Enable all snapshots to be kept by user preference
There can be use cases where the user wants to keep all the snapshots
This commit adds a way to keep all the snapshots, by setting maxtop to 0
When `maxtop` is set to 0, all the snapshots will be kept
4 years ago
Sayan Nandan 98752cf481
Add method to get a deep-clone of the `HashMap` 4 years ago
Sayan Nandan 4c4586c9c1
Re-implement snapshots and add tests 4 years ago
Sayan Nandan 66a447640b
Release read lock immediately
This helps us to avoid writer starvation
4 years ago
Sayan Nandan a527f3c39d
Implement `mksnap` so that snapshots can be made 4 years ago
Sayan Nandan 6ead5ebe6c
Rollout v0.4.4 4 years ago
Sayan Nandan 8e429c17f4
Add basic `Snapshot` object 4 years ago
Sayan Nandan f9672558d3
Update project metadata and add tests for `KEYLEN` 4 years ago
Sayan Nandan 0a72ea60ed
Add `KEYLEN` query 4 years ago
Sayan Nandan 9e6b455231
Document responses 4 years ago
Sayan Nandan 53f4d00e30
Add tests for `USET` 4 years ago
Sayan Nandan 26a1c4f92d
Add `USET` to actions doc 4 years ago
Sayan Nandan 09a15fd35c
Add `USET` query 4 years ago
Sayan Nandan e6250ae68a
Rollout v0.4.3 4 years ago
Sayan Nandan d2284834c7
Add `FLUSHDB` query 4 years ago
Sayan Nandan 31146f9908
Impl `Writable` for `u64` and remove redundancies 4 years ago
Sayan Nandan f6be0cd781
Bump up version 4 years ago
Sayan Nandan 07195a1d9e
Add `DBSIZE` query 4 years ago
Sayan Nandan 05ed0261ed
Add tests for pipelined queries 4 years ago
Sayan Nandan a2b25441f1
Add tests for `SDEL` 4 years ago
Sayan Nandan 2d5b40f41f
Add tests for `SSET` 4 years ago
Sayan Nandan 8b881d9dbd
Add tests for `SUPDATE` 4 years ago
Sayan Nandan 20041e41a4
Add `SUPDATE` query 4 years ago
Sayan Nandan 3dbc2bce40
Add `SSET` and `SDEL` for automated doc generation 4 years ago
Sayan Nandan f6f96c10c2
Add `SDEL` query 4 years ago
Sayan Nandan 01f43bcd88
Add `SSET` to `queryengine`
The `SSET` tag was added under tags and matched against
4 years ago
Sayan Nandan c9aa602542
Add `SSET` query 4 years ago
Sayan Nandan adb4e4b9f6
Add `strong` module 4 years ago
Sayan Nandan 1488a7786b
Add information on the Cyan Snapstore format
Also, `CyanSWF` was renamed to `CyanSFW` for consistency
4 years ago
Sayan Nandan b96a7831a2
Add `CyanSWF`, the streaming file writer object 4 years ago
Sayan Nandan ed6e990572
Fix incorrect versions
A mass rename was done in 1ac8dd8
This action incorrectly replaced versions in deps
This commit reverts the changes made to the dependency versions
4 years ago
Sayan Nandan 1ac8dd896a
Rollout v0.4.2 4 years ago
Sayan Nandan b2a5237191
Bump up version 4 years ago
Sayan Nandan a0ccf059de
Make `every` and `enabled` keys in bgsave optional
If there is no `enabled` key, then assume that BGSAVE is enabled
If there is an `every` and no `enabled`, assume that BGSAVE is enabled
4 years ago
Sayan Nandan 74c9d62fe0
Update docs for the `bgsave_scheduler` 4 years ago
Sayan Nandan 511e227f81
Enable BGSAVE to be configured via config file 4 years ago
Sayan Nandan 3a84feb14e
Cleanup to use `BGSave` as a configuration object
Also a test for a config file with a custom BGSAVE has been added
4 years ago
Sayan Nandan f2f0d2d4bd
Enable bgsave config to be read from the cfg file
Now, the `bgsave` key can be read and parsed from the config file
4 years ago
Sayan Nandan 20d0b3bf1f
Revert to using vector based tests
A custom testing macro would be made in the future.
For now, we will use the `QueryVec` based test to test the queries
4 years ago
Sayan Nandan b3500ee3b9
Use jemalloc for non-MSVC targets 4 years ago
Sayan Nandan d366f887a9
Close transport once every test is over 4 years ago
Sayan Nandan d1a04bdf23
Manually drop server in tests 4 years ago
Sayan Nandan 7dcf8b92d7
Enable tests for all queries 4 years ago
Sayan Nandan 3ad2d573a0
Add tests for mupdate 4 years ago
Sayan Nandan 7574e4bc58
Add tests for exists 4 years ago
Sayan Nandan ffaa1a563b
Add tests for mset 4 years ago
Sayan Nandan 42a8d145a1
Fix mset and mupdate not detecting an action error 4 years ago
Sayan Nandan f8a1980898
Add tests for mget 4 years ago
Sayan Nandan d8c385bf2d
Add tests for del 4 years ago
Sayan Nandan ea8d9d2108
Add syntax error tests for get, set and update 4 years ago
Sayan Nandan cab2ce733b
Add tests for heya, get, set and update queries 4 years ago
Sayan Nandan 096a0c901b
Remove unused functions and duplicates
`proc_query` is used by both by `tdb-bench` and `tsh` so it was moved.
Also, the `println`s in the query tests were moved into the macros
4 years ago