- Dec 19, 2023
-
-
-
Yaroslav Dynnikov authored
-
Yaroslav Dynnikov authored
Having two different fixtures `binary_path` and `path_to_binary_with_webui` results in weird failures in CI: ``` FAILED test/int/test_couple.py::test_exit_after_apply - conftest.TarantoolError: ('ER_NO_SUCH_PROC', "Procedure 'pico._inject_error' is not defined") ``` The root cause is that one `cargo build` overrides another with different features enabled. To resolve the issue this patch significantly refactors the test flow: 1. Web UI tests are skipped by default. One can enable it explicitly with `pytest --with-webui` 2. New fixture `cargo_build` behavior depends on environment: - In local dev environment it rebuilds the project with required features - In CI it skips rebuilding and runs tests against the existing build 3. The `path_to_binary_with_webui` fixture is removed. See also: - https://stackoverflow.com/a/55769818/1182787 - https://docs.pytest.org/en/7.4.x/how-to/writing_hook_functions.html - https://docs.pytest.org/en/7.4.x/how-to/mark.html - https://docs.pytest.org/en/7.4.x/example/simple.html#control-skipping-of-tests-according-to-command-line-option
-
Yaroslav Dynnikov authored
-
Before this patch we've had ADMIN_ID in schema.rs and ADMIN_USER_ID in lib.rs. This patch removes ADMIN_USER_ID in favor of ADMIN_ID
-
This patch adds initiator field to most of the events. Initiator is added to members of Op enum which do not contain it already (e g owner in CreateUser serves as initiator). To me it is reasonable to remove as_user from CaS/ACL checks because it matches initiator. But I decided not to do this just yet. Additionally I've mande small cleanup to UserMetadata to avoid need for intermediate step in decoding when we first fetch tuple and then decode it into model struct. Close https://git.picodata.io/picodata/picodata/picodata/-/issues/433
-
-
Frequently when we want to execute commands from different users we need to pass username and password separatly to each invokation. With this patch this approach can be simplified and connection can be used directlry in form of context manager. Additionally this patch fixes handling of NOLOG env var. When it is supplied logs are disabled which simplifies debugging of a test nbecause with continuous output from multiple instances it is impossible to use debugger efficiently.
-
At the later stage I discovered that sbroad applies the same validation rules during parsing of grant/revoke statements and even its own Privilege enum that is a ~copy of our PrivilegeType. Unfortunately at the moment there is no way to share code between picodata and sbroad efficiently (now only tarantool-module is shared and it is not suitable for such kind of things) so it still makes sense to have this in picodata because this is the point where all APIs converge to the single point (CaS). In the future all other ways of validation should be removed. Aside from sbroad similar kind of validation is performed independently on lua API side. Note that in prior commit 45ba7392 we've removed all privileges from role super. This patch removes privileges from admin that do not match the model: namely all privileges on universe except session and usage. With this patch it is no longer possible to grant or revoke such privileges.
-
This allows future constructors to enforce invariants. Additionally this commit removes redundant set_schema_version on Op by passing schema version to corresponding Op constructors.
-
-
- Dec 07, 2023
-
- Dec 06, 2023
-
-
-
Tested scenarios: 1. Alice is granted a privilege to create global/sharded table 2. Alice can create, read, and write it 3. Bob can't read it 4. Alice grants Bob a privilege to read it 5. Now Bob can read it, but he still can't write
-
-
Dmitry Ivanov authored
This patch adds a proper support for auxiliary fields containing `Option<T>`. As of now, KV pairs containing `Some(x)` will be printed as just `x`, while the ones with `None` won't be printed at all. Example: ```rust crate::audit!( message: "demo audit event", title: "example", severity: Low, test: Some(0u32), ); ``` ```json { "id": "1.0.1", "message": "demo audit event", "severity": "low", "time": "2023-12-06T17:16:51.085+0300", "title": "example", "test": "0" } ``` ```rust crate::audit!( message: "demo audit event", title: "example", severity: Low, test: None::<i32>, ); ``` ```json { "id": "1.0.1", "message": "demo audit event", "severity": "low", "time": "2023-12-06T17:16:51.085+0300", "title": "example" } ```
-
- Dec 04, 2023
-
-
Dmitry Ivanov authored
-
Dmitry Ivanov authored
This patch reintroduces instance-related events (e.g. `join_instance`) which were accidentally disabled in a bugfix of the DML handler (see commit 52ed9237 for more information) due to the lack of tests. Furthermore, this patch adds the following events: * expel_instance * change_config, which tracks changes in `_pico_property` This was the original intended change of the patch, but the apparent breakage of the preexisting events called for action.
-
Егор Ивков authored
This change allows for creators of corresponding objects to consequently have all privileges on them.
-
- Dec 03, 2023
-
-
- Test fails because of timeout on socket. Current vshard multi storage call works in 2 stages: 1. Ref needed storages 2. Execute stored procedure on the storages When creating Ref on storage, vshard waits for all buckets to become writable, if it happens that rebalancer will start to move buckets, the query execution will freeze until rebalancing is done, which happens for this test sometimes. - Comment out the flaky test until we switch to new vshard multicall algorithm. Another solution would be to increase timeout, but there is no guarantee that new timeout is big enough: I caught this error with 5s timeout.
-
Georgy Moshkin authored
-
Georgy Moshkin authored
-
Georgy Moshkin authored
-
Georgy Moshkin authored
-
Georgy Moshkin authored
-
Georgy Moshkin authored
-
Georgy Moshkin authored
This could result in a broken instance if it terminated in between the two storage writes. Now we always persist the commit index before applying the persisted entries and do so in a transaction with unstable entries or snapshot if they are present.
-
Georgy Moshkin authored
-
Georgy Moshkin authored
-
Georgy Moshkin authored
-
- Dec 01, 2023
-
-
Dmitry Ivanov authored
This patch fixes a possible DOS by checking whether the user exists before creating a record for its unsuccessful auth attempt. This is due to the fact that `box.session.on_auth` will be called even for unknown users (this helps vanilla users log such events).
-
Dmitry Ivanov authored
This patch adds two new events: * auth_ok * auth_fail, which may contain "verdict" describing user suspension. Examples: ```json { "id": "1.1.19", "message": "successfully authenticated user `guest`", "severity": "low", "time": "2023-11-30T19:02:10.708+0300", "title": "auth_ok", "user": "guest" } ``` ```json { "id": "1.0.11", "message": "failed to authenticate user `borat`", "severity": "high", "time": "2023-11-30T18:58:48.635+0300", "title": "auth_failed", "user": "borat" } ```
-
-
-
- Nov 29, 2023
-
-
-
Dmitry Ivanov authored
Logically, the record id consists of 3 fields: * `raft_id` -- raft id of the current node (or `null` if uninitialized); * `count` -- in-memory id which is auto incremented for each new record; * `gen` -- persistent id which is incremented each time node is started. However, in practice they are stored inside a global `LogicalClock`. This is what the record looks like now: ```json { "id": "1.0.3", "instance_id": "i1", "message": "a new instance `i1` joined the cluster", "raft_id": "1", "severity": "low", "time": "2023-11-29T17:07:36.524+0300", "title": "join_instance" } ``` Note how those fields are concatenated using `.`; the resulting unique id is represented by a json string type. Furthermore, since audit record logger now depends on the raft machine's state, we decided to move its initialization further into the init sequence (postjoin).
-
- Nov 28, 2023
-
-
Dmitry Rodionov authored
The patch adds remaining access checks for cluster wide management operations involving tables users and roles. Added checks closely follow ones in vanilla tarantool. Basic scenario now works. See newly added `test_create_space_smoke`. There are some follow ups I'd like to address separately, namely: - more tests for new ifs around box_access_check_ddl calls https://git.picodata.io/picodata/picodata/picodata/-/issues/420 - add tests for ownership semantics (these can be mostly ported from tarantool-module) blocked by https://git.picodata.io/picodata/picodata/picodata/-/issues/408 - port access.test and role.test from core (at some point later) https://git.picodata.io/picodata/picodata/picodata/-/issues/421 - Detect and prohibit circular role grants https://git.picodata.io/picodata/picodata/picodata/-/issues/415 Close #339
-
EmirVildanov authored
-
EmirVildanov authored
-