- Feb 07, 2023
-
-
Georgiy Lebedev authored
Bitset index size calculation uses the cardinality of the 'flag' bitset, but when the bitset index is empty, i.e., uninitialized, the 'flag' bitset is not allocated, hence we should simply return 0. Closes #5809 NO_DOC=bugfix (cherry picked from commit d542a01a)
-
- Feb 06, 2023
-
-
Oleg Chaplashkin authored
After adding the autorequiring luatest [1,2], there is no need to use the following approach now: ``` local t = require('luatest') local g = t.group() server:exec(function() local t = require('luatest') -- duplicate t.assert(...) end) ``` Modern approach looks like: ``` local t = require('luatest') local g = t.group() -- `t` already available in the remote server server:exec(function() t.assert(...) end) -- also it works with any variable local my_custom_t = require('luatest') server:exec(function() my_custom_t.assert(...) -- already available end) ``` [1] tarantool/luatest#277 [2] tarantool/luatest#289 Part of tarantool/luatest#233 NO_DOC=test fix NO_TEST=test fix NO_CHANGELOG=test fix (cherry picked from commit 98dd8e69)
-
Nikita Zheleztsov authored
We didn't take into consideration the fact, that precision value passed to control the width of nanoseconds part in datetime_object:format could be more than maximum positive value, integer may have. Currently it leads to segfault. ``` tarantool> require('datetime').new{}:format('%2147483648f') ``` We should check errno in order to find out, if overflow occurs. The problem is the fact, that `width` variable must have int type due to snprintf requirements ("%*d") and strtol returns long. Errno won't be set if returned value is in bounds [INT_MAX, LONG_MAX], but it will overflow int resulting in inconsistent behavior. So, let's save the result of strotl to the temp value. If this value doesn't belong to the above-mentioned set, or errno was set, we assign to `width` maximum value, it may have: 9. Closes tarantool/security#31 NO_DOC=bugfix (cherry picked from commit b6159217)
-
Mergen Imeev authored
This patch fixes some possible bugs that may occur due to malloc failure. Closes tarantool/security#65 Closes tarantool/security#66 Closes tarantool/security#68 NO_DOC=bugfix NO_TEST=hard to reproduce due to malloc() failure being an unusual case
-
- Feb 03, 2023
-
-
Yaroslav Lobankov authored
To improve the stability of the tests, let's use unix sockets for iproto connection instead of ports. NO_DOC=testing stuff NO_TEST=testing stuff NO_CHANGELOG=testing stuff (cherry picked from commit 65f66a6a)
-
- Feb 02, 2023
-
-
Yaroslav Lobankov authored
Bump test-run to new version with the following improvements: - Bump luatest to 0.5.7-25-g9e117e6 [1] [1] tarantool/test-run@7c77fcb NO_DOC=testing stuff NO_TEST=testing stuff NO_CHANGELOG=testing stuff (cherry picked from commit 4334862f)
-
Vladimir Davydov authored
Bump test-run to new version with the following improvements: - Bump luatest to 0.5.7-24-g8de38b3 [1] [2] - Add ignore_zero option to get_vclock [3] [1] https://github.com/tarantool/test-run/pull/370 [2] https://github.com/tarantool/test-run/pull/368 [3] https://github.com/tarantool/test-run/pull/367 NO_DOC=testing stuff NO_TEST=testing stuff NO_CHANGELOG=testing stuff (cherry picked from commit 764299c1)
-
Igor Munkin authored
As a result of the commit 98fcd437 ("ci: add CMAKE_EXTRA_PARAMS to LuaJIT workflow") both <inputs.buildtype> and <inputs.GC64> parameters have become obsolete. All jobs with LuaJIT integration testing has started to use these in scope of the commit tarantool/luajit@5b53850da30e532ced976e95af1f301667a6a272 ("ci: use CMAKE_EXTRA_PARAMS in LuaJIT integration"). Hence, the value of <inputs.CMAKE_EXTRA_PARAMS> has to be used to specify the build flavor, so <inputs.buildtype> and <inputs.GC64> can be dropped later. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci Reviewed-by:
Yaroslav Lobankov <y.lobankov@tarantool.org> Signed-off-by:
Igor Munkin <imun@tarantool.org> (cherry picked from commit 7c5cc681)
-
Igor Munkin authored
As a result of the commit 1eb0a696 ("ci: change runner dispatch for LuaJIT testing") <inputs.host> parameter has become obsolete. The testing workflow has been updated in scope of the commit tarantool/luajit@fcaecf8fb42ff8a35582fbd8d034eb6f3b9b5b68 ("ci: use strategy matrix for integration workflow"). Hence, the only changes required to finish the transition from <inputs.host> to <inputs.arch> + <inputs.os> are the following: * Drop <inputs.host> parameter from the LuaJIT integration workflow * Make both <inputs.arch> and <inputs.os> parameters obligatory Besides, there is no need to obtain the kernel name and the machine hardware name in scope of the separate workflow step, since all info need to be passed to .test.mk is already passed via workflow inputs. Anyway, .test.mk need to be adjusted to the values used for the new workflow parameters. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci Reviewed-by:
Yaroslav Lobankov <y.lobankov@tarantool.org> Signed-off-by:
Igor Munkin <imun@tarantool.org> (cherry picked from commit fdf45222)
-
Igor Munkin authored
Before the patch the LuaJIT integration workflow was dispatched to the runner with the name given via <inputs.host> parameter. Unfortunately, as a result of runners renaming we can't continue to dispatch the workflow this way. As a result of the patch there are two new workflow parameters: <inputs.arch> to pass the host architecture name (i.e. x86_64 or ARM64) and <inputs.os> to pass the OS family name (either Linux or macOS). Considering two values we can choose the proper runner in LuaJIT integration workflow. Besides, this change bring LuaJIT CI closer to matrix usage for its integration workflow. All three workflow parameters are not obligatory for now to avoid tarantool/luajit CI break on both long-term and working branches. When all branches are rebased on the new approach, <inputs.host> parameter will be removed and both <inputs.arch> and <inputs.os> will become obligatory. Moreover, the new 'regular' label is also added to <runs-on> list, since the new "lightweight" runners have been introduced to ghacts-shared-* pool. There are a couple of LuaJIT tests that requires more memory than provided by "lightweight" runners, so only "regular" ones need to be chosen for LuaJIT integration testing. Last but not least: attentive reader might notice there are strange values used as a default for <inputs.host> as well as <inputs.arch> and <inputs.os>. This is ugly hack required for the transition period, since one can't use empty string or unknown label name within <runs-on> label list. Hence 'self-hosted' looks like the most robust option for both old and new behaviours. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci Reviewed-by:
Yaroslav Lobankov <y.lobankov@tarantool.org> Signed-off-by:
Igor Munkin <imun@tarantool.org> (cherry picked from commit 1eb0a696)
-
Igor Munkin authored
Fun fact: our self-hosted macOS runner has the same name as the one provided by GitHub. Hence sometimes when no self-hosted runners are available, the public GitHub one is chosen. This patch enforces LuaJIT integration workflow to use only self-hosted runner by explicitly specifying this in runs-on section. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci Reviewed-by:
Yaroslav Lobankov <y.lobankov@tarantool.org> Signed-off-by:
Igor Munkin <imun@tarantool.org> (cherry picked from commit a8b95d09)
-
Igor Munkin authored
It's quite inconvenient to extend LuaJIT integration workflow now: one needs to patch GitHub workflow file in Tarantool repository and then setup integration testing in LuaJIT repository. This patch introduces a new workflow parameter that can replace several existing parameters (e.g. buildtype and GC64) and allow to easy extend integration CI in LuaJIT (with rare little touches in Tarantool). NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci Reviewed-by:
Sergey Kaplun <skaplun@tarantool.org> Reviewed-by:
Yaroslav Lobankov <y.lobankov@tarantool.org> Signed-off-by:
Igor Munkin <imun@tarantool.org> (cherry picked from commit 98fcd437)
-
Serge Petrenko authored
Fixing a bug with nodes in 'manual' election mode bumping the term excessively revealed a hang in election_pre_vote test. Turns out the test passed thanks to the previous buggy behaviour. The following behaviour is expected: when a node is configured in manual election mode, calling box.ctl.promote() on it should make it bump term once, try to gather votes and fail on timeout. Once the extra term bump on timeout was removed in commit 5765fdc4 ("raft: fix 'manual' nodes bumping the term excessively"), box.ctl.promote() without a quorum started hanging. Let's return the correct behaviour: 'manual' nodes should transition back to follower if an election timeout passes after the promotion without any term outcome. Enable the test_promote_no_quorum testcase of election_pre_vote test back, since it's fixed now. Follow-up #8168 Closes #8217 NO_DOC=bugfix NO_CHANGELOG=changes not released behaviour (cherry picked from commit 352fe0c7)
-
- Jan 31, 2023
-
-
Georgiy Lebedev authored
The memtx transaction manager MVCC invariant violation described in c8eccfbb could actually lead to a bug described in #7394, since `space:count` inherently relies on this invariant: add a test for this case. Closes #7394 NO_CHANGELOG=<bug was fixed in c8eccfbb> NO_DOC=bugfix (cherry picked from commit db6245f8)
-
- Jan 30, 2023
-
-
Vladislav Shpilevoy authored
A tuple update with the first operation creating a new field somewhere deep in the tuple and the second operation trying to go into that new field could crash. This happened because the route branching function xrow_update_route_branch() missed this case. It can be detected when see that the bar path is already fully used (the next JSON token is END), and the new operation's path is still not END. Closes #8216 NO_DOC=bugfix (cherry picked from commit d4e92809)
-
Vladislav Shpilevoy authored
A tuple update with the first operation creating a new field inside an array and the second operation trying to go into that field could crash. This happened because the branching function xrow_update_op_do_field_##op_type() didn't take into account newly set scalar fields and an `unreachable()` was hit. Part of #8216 NO_DOC=bugfix NO_CHANGELOG=next commit (cherry picked from commit eb26e732)
-
Vladislav Shpilevoy authored
They are going to be needed above their declaration prior to this patch. Also had to add a couple of obvious comments to calm checkpatch down. Needed for #8216 NO_DOC=refactoring NO_TEST=refactoring NO_CHANGELOG=refactoring (cherry picked from commit 3260b930)
-
Yaroslav Lobankov authored
Generate a test build key when the ALPINE_BUILD_KEY secret is empty. It is needed for fork PRs where secrets are unavailable. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci (cherry picked from commit a7b9ed4f)
-
Georgiy Lebedev authored
Since applied transactions are committed asynchronously, they are inherently 'read committed', hence their isolation level should be adjusted accordingly. Closes #8121 NO_DOC=bugfix (cherry picked from commit 7c12d490)
-
- Jan 27, 2023
-
-
Georgiy Lebedev authored
When we rollback a prepared statement that deletes an MVCC story, we need to reset the deleted story's PSN. Closes #7930 NO_DOC=bugfix (cherry picked from commit de938a6f)
-
Georgiy Lebedev authored
During transaction rollback, we unconditionally assign a PSN to it: we should do this only when necessary, i.e., a transaction is RW and is not already prepared. Needed for #7930 NO_CHANGELOG=refactoring NO_DOC=refactoring NO_TEST=refactoring (cherry picked from commit 494fe087)
-
Georgiy Lebedev authored
Currently, if transaction preparation fails, the transaction is left in an inconsistent state: it has a PSN assigned to it, but its status is not 'prepared' — fix this by resetting its PSN. Needed for #7930 NO_CHANGELOG=refactoring NO_DOC=refactoring NO_TEST=refactoring (cherry picked from commit c329e703)
-
Georgiy Lebedev authored
During preparation of insert statements in MVCC, we define an old story and abort all transactions that delete this story. If there exists an older story in the history chain, but the story is deleted by a prepared (not necessarily committed) transaction, we consider that it de-facto does not exist anymore — this logic is consistent, since during preparation of the transaction deleting this story, the conflict resolution described above was already done. In this manner, there can be no more than one prepared statement deleting a story at any point in time. Closes #8104 NO_DOC=bugfix (cherry picked from commit d7cf6f60)
-
Oleg Chaplashkin authored
Changed the work with hooks in the part of tests. Legacy approach: ``` g.before_all = function() ... end g.after_all = function() ... end ``` The logic of executing hooks will be expected and more controlled if use following approach: ``` g.before_all(function() ... end) g.after_all(function() ... end) ``` Resolve #8066 NO_DOC=test fix NO_TEST=test fix NO_CHANGELOG=test fix (cherry picked from commit ed136255)
-
- Jan 26, 2023
-
-
Sergey Vorontsov authored
Add building Alpine 3.16 packages for amd64 and aarch64. Part of tarantool/tarantool-qa#266 NO_DOC=ci NO_TEST=ci (cherry picked from commit 9a11ed4a)
-
Sergey Vorontsov authored
* Update build-time and run-time dependencies. * Support build with gc64 enabled. * Disable sysprof due to the following error while building: NO_WRAP ``` <...>/third_party/luajit/src/lj_sysprof.c:29:10: fatal error: execinfo.h: No such file or directory 29 | #include <execinfo.h> | ``` NO_WRAP * Update .pack.mk to set package version in the case of a git tag to the following format: 2.11.0[_<release type>] Where `<release type>` is `alpha1`, `beta1`, `rc1`, etc. Note, we have an extra logic when the git tag is `x.x.x-entrypoint`. Alpine build system doesn't support package name with such kind of version and that's why we use `alpha0` instead of `entrypoint`. See for details [1]. * Update .pack.mk to set package version in the other cases to the following format: 2.11.0_<release type>_p<N> Where `<release type>` is `alpha1`, `beta1`, `rc1`, etc and `<N>` is the patch number after the latest release. Unfortunately, we cannot use the similar version pattern that we use for dev DEB/RPM packages (`2.11.0_<release type>.<N>.dev`) because Alpine build system doesn't support it. Plus, we have the same logic for `entrypoint` here. See for details [1]. [1] https://wiki.alpinelinux.org/wiki/APKBUILD_Reference#pkgver Part of tarantool/tarantool-qa#266 NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci (cherry picked from commit 407a4d7f)
-
Serge Petrenko authored
test_promote_no_quorum testcase in election_pre_vote test started flaky hanging after commit 5765fdc4 ("raft: fix 'manual' nodes bumping the term excessively"). Disable it until the issue (#8217) is resolved. In-scope-of #8217 NO_DOC=tests NO_CHANGELOG=tests (cherry picked from commit 3273a51d)
-
Sergey Ostanevich authored
Promotion of a leader in the test requires previous leader state arrived to all replicas. Inconsistency may lead to promotion failure, which is correct from the raft point of view, but not expected by the test. Closes #7785 NO_DOC=test NO_CHANGELOG=test (cherry picked from commit 895cb2d2)
-
- Jan 25, 2023
-
-
Nikolay Shirokovskiy authored
Flight recorder uses mmapped file for performance reasons. Unfortunately if for some reason mapping is not possible we got SIGBUS on accessing mmapped memory. We already handle this issue on flight recorder start in [1]. But if we got SIGBUS in the meanwhile we currently got a crash. Let's just panic. [1] https://github.com/tarantool/tarantool-ee/commit/e68b84768f3ae76aa9f03d36dd6f0587b884e1bb CE Part of https://github.com/tarantool/tarantool-ee/issues/198 NO_DOC=stub for EE part NO_CHANGELOG=stub for EE part NO_TEST=tested in EE part (cherry picked from commit a72d602b)
-
Nikolay Shirokovskiy authored
Currently crash has code to report crashes to feedback URL. It does not belong to core. Also it brings dependencies from box to core with INSTANCE_UUID and REPLICASET_UUID variables. So let's move this part back to box. NO_DOC=refactoring NO_TEST=refactoring NO_CHANGELOG=refactoring (cherry picked from commit b75d1872)
-
Nikolay Shirokovskiy authored
Currently we keep nanoseconds but do not use them and as a result we have unneeded scaling. Let's use second precision which is on par with our need. Also drop ns_to_localtime. It can be written much shorter and it feels like we don't need distinct function here. Like when we formatting time in say.c. NO_TEST=refactoring NO_DOC=refactoring NO_CHANGELOG=refactoring (cherry picked from commit c457275a)
-
- Jan 24, 2023
-
-
Serge Petrenko authored
A node configured in 'manual' mode and promoted by `box.ctl.promote()` stays in is_candidate state for the whole term, even though it is not is_cfg_candidate. If such a node is the first one to notice leader death or to hit the election timeout, it bumps the term excessively, then immediately becomes a mere follower, because its is_candidate is reset with is_cfg_candidate. This extra term bump (one term after the node was actually promoted) is unnecessary and might lead to strange errors: tarantool> box.ctl.promote() --- - error: 'The term is outdated: old - 3, new - 4' ... Fix this by checking if a node is configured as a candidate before trying to start new elections. Closes #8168 NO_DOC=bugfix (cherry picked from commit 5765fdc4)
-
Serge Petrenko authored
There is a false assertion in raft_stop_candidate(): it assumes that the node must always have a running timer whenever it sees the leader. This is not true when the node is busy writing the new term on disk. Cover the mentioned case in the assertion. Closes #8169 NO_DOC=bugfix Co-authored-by:
Sergey Ostanevich <sergos@tarantool.org> (cherry picked from commit df6cf5ec)
-
Yaroslav Lobankov authored
The approach - name: Set output run: echo "::set-output name={name}::{value}" is deprecated [1]. Switching to the new approach: - name: Set output run: echo "{name}={value}" >> $GITHUB_OUTPUT [1] https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci (cherry picked from commit 627f6a26)
-
- Jan 23, 2023
-
-
Sergey Bronnikov authored
Changelog: https://curl.se/changes.html#7_87_0 New release contains fixes for 7 security problems [1]: https://curl.se/docs/CVE-2022-35252.html https://curl.se/docs/CVE-2022-32221.html https://curl.se/docs/CVE-2022-35260.html https://curl.se/docs/CVE-2022-42915.html https://curl.se/docs/CVE-2022-42916.html https://curl.se/docs/CVE-2022-43551.html https://curl.se/docs/CVE-2022-43552.html Patch adds a new option ENABLE_WEBSOCKETS defined in curl build infrastructure with it's default value used in 7.87.0. 1. https://curl.se/docs/releases.html NO_DOC=libcurl submodule bump NO_TEST=libcurl submodule bump Closes #8150 (cherry picked from commit 09f4eca1)
-
Sergey Bronnikov authored
Curl 7.87 uses CMake's keywords (for example GREATER_EQUAL [0]) available since CMake 3.7. However, we are still supporting old Ubuntu version where CMake version lower than 3.7 is used. This patch adds a script that enables CMake repository with newer CMake packages for Ubuntu 16.04 (Xenial) and bumps a required version of CMake. NOTE (regarding cmake3 package): Commit 1a62d874 ("build: update CMake minimum version to 3.1") [1] added an additional package requirement with "cmake3". This package has been created in addition to package "cmake", because CMake 3 had breaking changes [2]. Package "cmake3" has been provided only in Ubuntu 14.04 LTS (Trusty Tahr) [4], that will be EOLed in 2024, and CentOS 7, that was EOLed in Aug 2020 and will have end of security support in Jun 2024 [5]. Latest version of package "cmake3" for Ubuntu 14.04 is 3.5.1 [3], so it is not worth to bump version of cmake3 in requirements and I left it the same. 0. https://cmake.org/cmake/help/latest/command/if.html#greater-equal 1. https://github.com/tarantool/tarantool/commit/1a62d874db5f4780da5b35b6d4d0e3a296148920 2. https://cmake.org/cmake/help/latest/release/3.0.html#id4 3. https://launchpad.net/ubuntu/trusty/+package/cmake3 4. https://ubuntu.com/about/release-cycle 5. https://wiki.centos.org/About/Product Needed for #8150 NO_CHANGELOG=see the next commit NO_DOC=libcurl submodule bump NO_TEST=libcurl submodule bump (cherry picked from commit 7003272d)
-
- Jan 18, 2023
-
-
Vladimir Davydov authored
ICU symbol renaming was disabled in EE build by commit https://github.com/tarantool/tarantool-ee/commit/f51346d682e3afd93592023d0dedfb1e45167c7a ("static-build: disable symbols renaming for libicu"), because EE build exports ICU symbols so that they can be used by Lua modules. It isn't necessary in CE build, but since we're planning to reuse the CE cmake config in the EE repository, we should do that. Needed for https://github.com/tarantool/tarantool-ee/issues/185 NO_DOC=no functional changes NO_TEST=no functional changes NO_CHANGELOG=no functional changes (cherry picked from commit 9362f4a8)
-
Vladimir Davydov authored
Split it so that it can be reused in the EE repository: - static-build/cmake/AddDependencyProjects.cmake Adds the external projects that are required to build tarantool. The project names are stored in the TARANTOOL_DEPENDS variable. - static-build/cmake/AddTarantoolProject.cmake Should be called after AddDependencyProjects.cmake, because it uses the TARANTOOL_DEPENDS variable. Adds the Tarantool external project and sets the TARANTOOL_BINARY to the path to the built tarantool binary. - static-build/cmake/AddTests.cmake Should be called after AddTarantoolProject.cmake, because it uses the TARANTOOL_BINARY variable. Adds cmake tests for the static binary. Now, static-build/CMakeLists.txt just includes the three helper files. The helper files are designed in such a way that they can be included from the EE repository's CMakeLists.txt. We split the original config into the three helper files, because in the EE repository, we need to add extra dependency projects and extra tests. While we are at it, we also move the cmake tests from static-build/test/static-build to static-build/test and static-build/test/CheckDependencies.cmake to static-build/cmake/CheckDependencies.cmake. This commit introduces no functional changes - it just moves the code. Needed for https://github.com/tarantool/tarantool-ee/issues/185 NO_DOC=refactoring NO_TEST=refactoring NO_CHANGELOG=refactoring (cherry picked from commit 520884a9)
-
Ilya Verbin authored
Currently `make` in `static-build` doesn't rebuild Tarantool when source files are changed. Fix this by setting BUILD_ALWAYS option, which forces rescan for changes of the external project [1]: > This option is not normally needed unless developers are expected to > modify something the external project's build depends on in a way that > is not detectable via the step target dependencies (e.g. SOURCE_DIR is > used without a download method and developers might modify the sources > in SOURCE_DIR). It is available since CMake 3.1, so update cmake_minimum_required, as we already require it (fa8d70ca). [1] https://cmake.org/cmake/help/latest/module/ExternalProject.html Part of #7536 NO_DOC=build NO_TEST=build NO_CHANGELOG=minor (cherry picked from commit a1f554bd)
-
- Jan 17, 2023
-
-
Serge Petrenko authored
Every libunwind error during backtrace collection is reported with `say_error`. Since commit 19abfd2a ("misc: get rid of fiber_gc") backtraces are collected on each fiber gc allocation, of which there are plenty. For some reason (https://github.com/tarantool/tarantool/issues/7980) each unw_step fails on mac, and an error is spammed to instance logs, even though the backtrace is actually collected. Silence the errors, since there is no much use for them anyway. And silence all of them just to be consistent. This doesn't close #7980, because that issue still needs a proper fix. Although its severity is ameliorated now. In-scope-of #7980 NO_DOC=bugfix NO_CHANGELOG=bugfix NO_TEST=nothing to test (cherry picked from commit c324eedd)
-