- Aug 02, 2022
-
-
Mergen Imeev authored
In most cases, NaN was treated as NULL. But in case NaN was returned as a result of a Lua or C user defined function, it was considered a double. After this patch, NaN will also be considered NULL in the specified cases. Closes #6374 Closes #6572 NO_DOC=bugfix
-
Mergen Imeev authored
This patch makes the is_res_neg flag false in the sql_rem_int() function if the left value is negative and the result is 0. Prior to this patch, the value of the flag was true, which resulted in an assertion during encoding 0 as MP_INT. Closes #6575 NO_DOC=bugfix
-
Mergen Imeev authored
The smallest positive double value is 2.225E-307, and the value before the exponent has a maximum of 15 digits after the decimal point. This means that double values cannot have more than 307 + 15 digits after the decimal point. After this patch, ROUND() will return its first argument unchanged if the first argument is DOUBLE and the second argument is INTEGER greater than 322. Closes #6650 NO_DOC=bugfix
-
- Aug 01, 2022
-
-
Vladimir Davydov authored
Compressed tuples aren't supposed to be seen outside memtx internals: we always decompresses tuples before returning them to the user; tuples are written decompressed to xlog. We should also decompress tuples before writing them to a snapshot or sending them to a remote replica, but currently we don't, which results in a crash trying to recover from a snapshot that contains compressed spaces. This patch fixes this by decompressing all tuples in snapshot iterator. Since the decompressed tuples are allocated on the region, we should also call fiber_gc() after each snapshot iterator iteration. Note that the decompression is unconditional, i.e. we try to decompress all tuples stored in an index. In general we can't figure out if a tuple is compressed, because its format may be unavailable (when a tuple is freed, its format_id is overwritten). Needed for https://github.com/tarantool/tarantool-ee/issues/171 NO_DOC=bug fix NO_TEST=ee NO_CHANGELOG=ee
-
Vladimir Davydov authored
memtx_tuple_maybe_decompress calls memtx_tuple_decompress if the tuple is compressed, otherwise it returns the tuple as is. Actually, the only place we call memtx_tuple_decompress directly is memtx_tuple_validate, but there we check if the tuple is compressed first so we could just as well call memtx_tuple_maybe_decompress. Let's make memtx_tuple_decompress work like memtx_tuple_maybe_decompress and kill the latter. NO_DOC=refactoring NO_TEST=refactoring NO_CHANGELOG=refactoring
-
Andrey Saranchin authored
@TarantoolBot document Title: Fiber slice Introduce fiber slices. Fiber slice is over if fiber is being executed without yield longer than the value of the slice. One can check if the slice is over. Also it is checked during space iteration when one uses select/pairs/get methods and before DML queries. Fiber slice consists of two parts: warning and error slices. When warning slice is over, warning "fiber has not yielded for more than <warn_slice> seconds" will be written in log, and when error slice is over, an error "FiberSliceIsExceeded: fiber slice is exceeded" will be thrown. Default fiber slice is 0.5 sec for warning and 1.0 sec for error. Lua API: slice = {warn = time_in_seconds, err = time_in_seconds} - fiber.check_slice() - write in warn log if warning slice is over, throw an error if error slice is over. - fiber.set_max_slice([fib_id], slice) - set max slice to passed fiber, otherwise set default max slice that will used by all fibers without max slice. One can pass number instead of table to set error slice and disable warning. - fiber.set_slice(slice) - set slice for current fiber execution. One can pass number instead of table to set error slice and disable warning. - fiber.extend_slice(slice) - extend slice of current fiber execution. One can pass number instead of table to extend error slice only. One can send SIGURG to an instance to set current slice to 0. It will stop iteration over space. Examples: Using fiber slice to stop doing stuff. ```lua fiber = require('fiber') function fib_f() -- Run until condition is false or error slice is over. while condition do fiber.check_slice() do_stuff() end end fib = fiber.new(fib_f) -- Set error slice 0.5 sec and no warning slice for our fiber. fib:set_max_slice(0.5) fib:set_joinable(true) fib:join() ``` Using fiber slice to limit iteration in space. ```lua fiber = require('fiber') function fib_f() -- Full scan on a huge space will be stopped. box.space.huge_space:select{} end fib = fiber.new(fib_f) -- Set error timeout 3 sec and warning timeout 0.2 sec for our fiber. fib:set_max_slice({warn = 0.2, err = 3}) fib:set_joinable(true) fib:join() ``` NO_TEST=no changes
-
Andrey Saranchin authored
The patch introduces opportunity for user to reset slice of current fiber execution. It allows to limit iteration in space with SIGURG. NO_CHANGELOG=see later commits NO_DOC=see later commits
-
Andrey Saranchin authored
Currently, there is no way to interrupt a long execution of a request (such as s:select(nil)). This patch introduces this opportunity. Box will use fiber deadline timeout as a timeout for DML usage. Thus, when deadline of current fiber is up, all DML requests will end with a particular error. Closes #6085 NO_CHANGELOG=see later commits NO_DOC=see later commits
-
Andrey Saranchin authored
Part of #6085 NO_TEST=no behavior changes NO_CHANGELOG=no behavior changes NO_DOC=no behavior changes
-
Andrey Saranchin authored
This patch introduces execution time slice for fiber. Later, we will use this mechanism to limit iteration in space. Part of #6085 NO_CHANGELOG=see later commits NO_DOC=see later commits
-
Alexander Turenko authored
The Rust module [1] leans on several internal symbols. They were open in Tarantool 2.8 (see #2971 and #5932), but never were in the public API. Tarantool 2.10.0 hides the symbols and we need a way to get them back to use in the module. We have the following options: 1. Design and expose a module API for fiber channels. 2. Export the symbols with a prefix like `tnt_internal_` (to don't spoil the global namespace). 3. Provide a `dlsym()` alike function to get an address of an internal symbol for users who knows what they're doing. I think that the third way offers the best compromise between amount of effort, quality of the result and opportunities to extend. In this commit I hardcoded the list of functions to make the change as safe as possible. Later I'll return here to autogenerate the list. Exported the following function from the tarantool executable: ```c void * tnt_internal_symbol(const char *name); ``` I don't add it into the module API headers, because the function is to perform a dark magic and we don't suggest it for users. While I'm here, added `static` to a couple of fiber channel functions, which are only used within the compilation unit. [1]: https://github.com/picodata/tarantool-module Part of #7228 Related to #6372 NO_DOC=don't advertize the dangerous API NO_CHANGELOG=don't advertize the dangerous API
-
- Jul 29, 2022
-
-
Yaroslav Lobankov authored
This patch adds missing `ninja` package to deps for FreeBSD and OSX systems to provide possibility to use `ninja` as a build system on them. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
- Jul 27, 2022
-
-
Ilya Verbin authored
The valid range for thread_id is [0, iproto_threads_count - 1]. Closes #7196 NO_DOC=bugfix
-
Igor Munkin authored
If Tarantool tests fail in LuaJIT integration workflow used in tarantool/luajit repository and LuaJIT submodule is already bumped in tarantool/tarantool repository, one can't rerun the failed job since "LuaJIT bump" step brings down the whole pipeline with "nothing to commit" reason. There are still many flaky tests, so to make this integration workflow rerunnable from tarantool/luajit repository --allow-empty option is added to the git commit command. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci Reviewed-by:
Yaroslav Lobankov <y.lobankov@tarantool.org> Reviewed-by:
Sergey Kaplun <skaplun@tarantool.org> Signed-off-by:
Igor Munkin <imun@tarantool.org>
-
Ilya Verbin authored
Add a missed check to on_replace_dd_truncate, similar to on_replace_dd_space and on_replace_dd_index. Closes #7309 NO_DOC=bugfix
-
Igor Munkin authored
* test: make sysprof tests more deterministic * test: increase sampling interval in sysprof tests * LJ_GC64: Fix IR_VARG offset for fixed number of results. * sysprof: implement stack sandwich support * symtab: fix .symtab section dump of the executable * sysprof: disable proto and trace dumps in default * ci: introduce GitHub action for environment setup * build: configure parallel jobs * ci: replace hw.ncpu with hw.logicalcpu for macOS * ci: add Tarantool integration testing * ci: remove GC64 matrix entries for ARM64 workflows * ci: fix --parallel argument for MacOS runners Closes #7172 Closes #7244 Closes #7264 Part of #7230 Needed for #7472 NO_DOC=LuaJIT submodule bump NO_TEST=LuaJIT submodule bump
-
Andrey Saranchin authored
The problem is that even if we block all signals on all threads except the main thread, the signals still can be delivered to other threads (#7206). And another problem is that user can spawn his own thread and not block signals. That is why the patch introduces tt_sigaction function that guarantees that all signals will be handled only by the main thread. We use this helper in clock_lowres module. This is supposed to solve the problem, described in #7408. NO_CHANGELOG=internal NO_DOC=internal
-
Andrey Saranchin authored
Currently, tarantool uses fiber() macro in crash_collect() to collect backtraces, which is redundant and leads to NULL dereferencing if crash signal callback is executed on thread with no initialized cord. The patch makes it possible not to use fiber module for collecting backtraces and gets rid of fiber() macro in crash_collect(). NO_CHANGELOG=internal NO_TEST=internal NO_DOC=internal
-
- Jul 26, 2022
-
-
Alexander Turenko authored
Added a function (see the API in the documentation request below), which reflects the `tuple[json_path]` Lua API (see #1285). Part of #7228 @TarantoolBot document Title: tuple: access a field using JSON path via module API The following function is added into the module API: ```c /** * Return a raw tuple field in the MsgPack format pointed by * a JSON path. * * The JSON path includes the outmost field. For example, "c" in * ["a", ["b", "c"], "d"] can be accessed using "[2][2]" path (if * index_base is 1, as in Lua). If index_base is set to 0, the * same field will be pointed by the "[1][1]" path. * * The first JSON path token may be a field name if the tuple * has associated format with named fields. A field of a nested * map can be accessed in the same way: "foo.bar" or ".foo.bar". * * The return value is valid until the tuple is destroyed, see * box_tuple_ref(). * * Return NULL if the field does not exist or if the JSON path is * malformed or invalid. Multikey JSON path token [*] is treated * as invalid in this context. * * \param tuple a tuple * \param path a JSON path * \param path_len a length of @a path * \param index_base 0 if array element indexes in @a path are * zero-based (like in C) or 1 if they're one-based (like * in Lua) * \retval a pointer to a field data if the field exists or NULL */ API_EXPORT const char * box_tuple_field_by_path(box_tuple_t *tuple, const char *path, uint32_t path_len, int index_base); ```
-
Alexander Turenko authored
It is preparatory change to expose the `box_tuple_field_by_path()` function into the module API. A user should have ability to choose zero-based (as in C) or one-based (as in Lua) array element selectors. This commit adds the `index_base` parameter into several internal functions, which access a field using a JSON path. Part of #7228 NO_DOC=refactoring, no user-visible changes NO_TEST=will be tested in a next commit implicitly by box_tuple_field_by_path() test cases NO_CHANGELOG=refactoring, no user-visible changes
-
Nick Volynkin authored
Ubuntu Impish Indri (21.10) has reached end of life (https://wiki.ubuntu.com/Releases). There will be no further releases of Tarantool for Ubuntu 21.10, hence there's no need to run tests and check packaging. NO_TEST=ci NO_DOC=ci Resolves tarantool/tarantool-qa#257
-
- Jul 25, 2022
-
-
Ilya Verbin authored
In Lua field's numbers are counted from base 1, however currently space:format() and space.foreign_key return zero-based foreign key fields, which leads to an error on space:format(space:format()). Closes #7350 NO_DOC=bugfix
-
Ilya Verbin authored
Currently a foreign_key field in the `format` argument, passed to normalize_format, can be changed inside normalize_foreign_key_one. Fix this by using a local copy of def.field. NO_DOC=bugfix NO_CHANGELOG=minor bug
-
- Jul 22, 2022
-
-
Yaroslav Lobankov authored
The packpack-dont-decline-custom-version.patch file was introduced in 9707a7bd (github-ci: support the new version format) and tried to resolve the issue that actually did not exist. PackPack supports accepting a custom version (pay attention to `?=`) [1] and the patch is not needed. [1] https://github.com/packpack/packpack/blob/194f898750cbbee6dd35255fe8aa7ec878eb3836/pack/config.mk#L45 NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
The 2.8 branch is not longer supported. So there is no sense to keep the logic for it. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
Now it's time to drop the `.gitlab.mk` makefile because `.pack.mk` has fully replaced it. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
This patch introduces the new test makefile `.pack.mk` instead of the ancient `.gitlab.mk`. The `.pack.mk` file is a refactored version of `.gitlab.mk` and contains only those targets that are indeed used. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
- Jul 21, 2022
-
-
Ilya Verbin authored
It is inconvenient to create self-referencing FK constraints, as the space ID will only be generated during space creation. This is especially useful for SQL, since the format for the space is created at compile time, and the space ID is only obtained at run time. Closes #7200 @TarantoolBot document Title: Describe foreign keys referring to the same space Since: 2.11 Root document: https://www.tarantool.io/en/doc/latest/book/box/data_model/#foreign-keys It is possible to create a foreign key that refers to the same space (a child space equals to the parent space). To do that, omit `space` in the `foreign_key` parameter, or set it to the id or to the name of the current space.
-
Boris Stepanenko authored
According to man 3 exec: "The first argument, by convention, should point to the filename associated with the file being executed.". Using empty string as the first argument while calling `true` program, provided by coreutils led to error message being printed to stderr, which failed the test. This patch passes 'true' as the first argument. Closes #7452. NO_DOC=test NO_CHANGELOG=test
-
Nikita Zheleztsov authored
Currently net.box's methods doesn't check types of passed options. This can lead to Lua's internal errors, which are not self-explaining. Let's add this functionality and raise errors with meaningful messages in case of incorrect options. Closes #6063 Closes #6530 NO_DOC=Not a visible change
-
Nikita Zheleztsov authored
Test is needed to be updated every time net.box's internals are patched (e.g. in case of adding new functions of deleting old ones), as the order of suggested autocomplete options changes. Let's replace `assert_equals` with `assert_items_equals`, which is not order dependent. NO_DOC=test NO_CHANGELOG=test
-
- Jul 19, 2022
-
-
Yaroslav Lobankov authored
In order to support parallel cmake build in the `test-jepsen` target we need to run Jepsen testing in a `debian-buster` container instead of `debian-stretch` due to the old `cmake` version in it. The `cmake` utility started to support `--parallel` option since 3.12 version [1]. In Debian Stretch `cmake` has version 3.7. In Debian Buster `cmake` has version 3.13. [1] https://cmake.org/cmake/help/latest/release/3.12.html#command-line NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
A note for the `.gitlab.mk` makefile: Mentions about `.travis.mk` in `.gitlab.mk` file will be removed in the scope of refactoring it later. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
Now it's time to drop the `.travis.mk` makefile because `.test.mk` has fully replaced it. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
A note for arm64 OSX workflows: The `arch -arm64` command prior to calling the makefile was omitted because now the GitHub Actions agent has a build for arm64 machines. Hence the agent is able to run without Rosetta 2 binary translator. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
This patch adds actions with installing deps for Debian, FreeBSD, and OSX operation systems. Also, it adds an action with installing deps for Jepsen testing. Debian, FreeBSD, and OSX actions should be used before running tests on the corresponding operation systems. Jepsen action should be used before running Jepsen tests. Reasoning: 1. The makefile w/o targets with deps installation is OS-independent. It should work on all systems. 2. Deps installation is more about env preparation rather than building and testing. Moreover, it is OS-dependent. So it's logical to take it outside the makefile into a GitHub action. 3. If we need testing on other operation systems, for example, CentOS, we will just create a special action with deps installation for that. No changes for the makefile will be needed. All should work out of the box. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
This patch introduces the new test makefile `.test.mk` instead of the ancient `.travis.mk`. The `.test.mk` file is a fully reworked version of `.travis.mk` with the huge refactoring and contains only those targets that are indeed used. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Timur Safin authored
Created simplistic unit test for checking boundary conditions for `datetime_unpack` function. NO_DOC=internal NO_CHANGELOG=internal
-
Timur Safin authored
Introduced fuzzing testing for datetime decoder. NO_DOC=internal NO_CHANGELOG=internal
-