- Oct 20, 2023
-
-
Vladimir Davydov authored
We install a signal handler that prints the stack trace on SIGSEGV, SIGBUS, SIGILL, SIGFPE. The signal handler uses the current stack. This works fine for most issues, but not for stack overflow, because the latter makes the current stack unusable, leading to a crash in the signal handler. Let's install an alternative signal stack in each thread so that we can print the stack trace on stack overflow. Note that we skip this for ASAN because it installs its own signal stack. (Installing a custom stack would result in a crash.) Closes #9222 NO_DOC=bug fix (cherry picked from commit cb8e903b)
-
- Oct 17, 2023
-
-
Nikolay Shirokovskiy authored
The motivation is to reduce time slip on Tarantool startup before running init scripts. Internal ev time is set in fiber_init/ev_default_loop and is not get updated until starting event loop. This causes timeouts slip up to 0.3 in debug ASAN build in init script (see #9261). Let's run event loop right at the beginning of the run_script_f before executing any script. This way besides updating internal ev time we make an explicit place of starting script event loop. Currently it is started lazily when config script yields. This will fix CI for PR https://github.com/tarantool/tarantool-ee/pull/572 for debug ASAN workflow. We can also remove start_loop condition. It does not make sense now. It was added in the commit 3a851430 ("Fix tarantool -e "os.exit()" hang") but since then we start to stop event loop after handling os.exit(). Also this fixes #9266. The issue is we don't have an event loop to run on shutdown triggers if -e command line expression add such a trigger and then call os.exit(). Follow-up #7327 Closes #9266 NO_DOC=bugfix (cherry picked from commit 1fcfb8c2)
-
Pavel Balaev authored
This patch fixes issue: $ tarantoolctl rocks --version 1>/dev/null Warning: failed to load command module luarocks.cmd.help NO_DOC=bugfix NO_CHANGELOG=not released yet (cherry picked from commit d6ae403e)
-
- Oct 13, 2023
-
-
Ilya Verbin authored
During building an index in background, some transaction can perform a dml request that affects space size (e.g. a replace), but the size will remain the same, because bsize is moved from the old space to the new space in memtx_space_prepare_alter() prior to space_execute_dml(). Fix this issue by calling space_finish_alter() in alter_space_do(). In fact, this patch partially reverts commit 9ec3b1a4 ("alter: zap space_vtab::commit_alter"). NO_DOC=bugfix Closes #9247 (cherry picked from commit 54a42186)
-
- Oct 12, 2023
-
-
Oleg Chaplashkin authored
These tests fail after the commit [1] has been added to the Luatest: - app-luatest/gh_8083_fatal_signal_handler_test.lua - app-luatest/gh_8445_crash_during_crash_report_test.lua - box-luatest/gh_7434_yield_in_on_shutdown_trigger_test.lua The issue is due to lack of necessary directories: sh: 1: cd: can't cd to /tmp/t/001_app-luatest/server-XXX Just update tests on the simple `fio` module instead `luatest.server`. [1] tarantool/luatest@7d1358c NO_CHANGELOG=internal NO_DOC=internal (cherry picked from commit 23b61351)
-
- Oct 11, 2023
-
-
Nikolay Shirokovskiy authored
The test start to fail in CI on osx_debug (x86_64) workflow ``` [033] *** test_buffer_foreach_copy_number *** [033] -ok 13 - prbuf(size=256, payload=16, iterations=16) has been validated [033] -ok 14 - prbuf(size=256, payload=16, iterations=32) has been validated [033] -ok 15 - prbuf(size=256, payload=16, iterations=64) has been validated [033] +ok 13 - prbuf(size=256, payload=4294967312, iterations=16) has been validated [033] +ok 14 - prbuf(size=256, payload=4294967312, iterations=32) has been validated [033] +ok 15 - prbuf(size=256, payload=4294967312, iterations=64) has been validated [033] *** test_buffer_foreach_copy_number: done *** ``` NO_CHANGELOG=test fix NO_DOC=test fix (cherry picked from commit 4a868563)
-
- Oct 10, 2023
-
-
Mergen Imeev authored
Before this patch, if an index was created due to a column's UNIQUE constraint or a column's PRIMARY KEY constraint before adding a collation, and if the column's fieldno was not equal to the index's position in space->index, the collation would not be assigned to the index. Also, this patch fixes an assertion in debug build for the case when an index with more that one field was created before a collation was added. Closes #9229 NO_DOC=bugfix (cherry picked from commit 65608d87)
-
Nikolay Shirokovskiy authored
This test is quite a flaky in debug ASAN build. Let's fix it before turning debug ASAN on in CI. The issue is due to heavy load popen.read may return nil with 'TimedOut: timed out' error. Just read again as in the other cases of this test. Part of #7327 NO_CHANGELOG=internal NO_DOC=internal (cherry picked from commit 6f48b8d7)
-
- Oct 09, 2023
-
-
Serge Petrenko authored
Force recovery first tries to collect all rows of a transaction into a single list, and only then applies those rows. The problem was that it collected rows based on the row replica_id. For local rows replica_id is set to 0, but actually such rows can be part of a transaction coming from any instance. Fix recovery of such rows Follow-up #8746 Follow-up #7932 NO_DOC=bugfix NO_CHANGELOG=the broken behaviour couldn't be seen due to bug #8746 (cherry picked from commit 85df1c96)
-
Serge Petrenko authored
In order to preserve transaction boundaries over replication, Tarantool writes a global NOP row after the last transaction row, if this row happens to be local. This is done to make sure that the is_commit flag, which is set only in the last transaction row, reaches the replica. This wouldn't happen if the last row was local. This workaround works fine for transactions completely authored by one instance: when both global and local rows come from operations of a single master. However, it's possible to append local rows to a remote master's transaction on a replica. For example, one can use on_replace triggers to write to replica's local space on each new transaction coming from master. In this case essentially a global NOP entry is added at the end of a remote master's transaction. This leads to several problems. First of all, this bumps replica's LSN, which is counter-intuitive, given that the replica might even be read-only. Besides, in a star topology this leads to master being unable to connect to the replica later on due to their vclocks becoming incompatible. Secondly, even if replication channel between master and replica is bidirectional, it creates a new row which should be replicated from replica to master, but at the same time is the last row of the master's transaction. Once master receives this row, it breaks its connection to replica due to transaction boundary violation (the last row of the transaction is received without its beginning). Adding a NOP row became extraneous since the previous commit, which made relay find transaction boundaries by itself. Closes #8958 NO_DOC=bugfix (cherry picked from commit f5e52b2c)
-
Serge Petrenko authored
Transaction boundaries were not updated correctly for transactions in which local space writes were made from a replication trigger. Existing transaction boundaries and row flags from the master were written as is on the replica. Actually, the replica should recalculate transaction boundaries and even WAIT_SYNC/WAIT_ACK flags. Transaction boundaries should be recalculated when a replica appends a local write at the end of the master's transaction, and WAIT_SYNC/WAIT_ACK should be overwritten when nopifying synchronous transactions coming from an old term. The latter fix has uncovered the bug in skipping outdated synchronous transactions: if one replica replaces a transaction from an old term with NOPs and then passes that transaction to the other replica, the other replica raises a split brain error. It believes the NOPs are an async transaction form an old term. This worked before the fix, because the rows were written with the original WAIT_ACK = true bit. Now this is fixed properly: we allow fully NOP async tranasctions from the old term. Closes #8746 NO_DOC=bugfix NO_CHANGELOG=covered by the next commit (cherry picked from commit 099cb2da)
-
- Oct 03, 2023
-
-
Nikolay Shirokovskiy authored
It is not convenient that test_downgrade_from_more_recent_version breaks if we create tag for new version and do not add next version to the downgrade versions list. If the version is released we should add it to the list anyway but it is not matter of this test. Follow up #9182 NO_DOC=internal NO_CHANGELOG=internal (cherry picked from commit 25b7411d)
-
- Oct 02, 2023
-
-
Nikolay Shirokovskiy authored
In this case we don't have knowledge how to downgrade correctly. Close #9182 NO_DOC=bugfix (cherry picked from commit cbe6a4da)
-
- Sep 29, 2023
-
-
Serge Petrenko authored
mp_compare_decimal_any_number erroneously assumed that any float or double from which a decimal can't be created is either infinite or NaN. This is not true. Any float greater than 1e38 can't fit into our decimal representation. When such a float got compared to a decimal, an assertion fired, which was wrong. Luckily, on release build the comparison was correct. Only the assertion is wrong. Fix it. Closes #8472 NO_DOC=bugfix (cherry picked from commit f1b23896)
-
Serge Petrenko authored
Our split-brain detection machinery relies among other things on all nodes tracking the synchro queue confirmed lsn. This tracking was only added together with the split-brain detection. Only the synchro queue owner tracked the confirmed lsn before. This means that after an upgrade all the replicas remember the latest confirmed lsn as 0, and any PROMOTE/DEMOTE request from the queue owner is treated as a split brain. Let's fix this and only enable split-brain detection on the replica set once the schema version is updated. Thanks to the synchro queue freeze on restart, this can only happen after a new PROMOTE or DEMOTE entry is written by one of the nodes, and thus the correct confirmed lsn is propagated with this PROMOTE/DEMOTE to all the cluster members. Closes #8996 NO_DOC=bugfix (cherry picked from commit a844bd37)
-
- Sep 28, 2023
-
-
Sergey Kaplun authored
With this option enabled (new), the multiresults returned by a stored C function via iproto aren't wrapped in the additional msgpack array (old). Due to new behaviour some renames are performed: * `port_c_dump_msgpack()` -> `port_c_dump_msgpack_wrapped()`, since this is dump format with additional msgpack array encoded. * `port_c_dump_msgpack16()` -> `port_c_dump_msgpack()`, since this format is now the default new format of a msgpack dump. The behaviour of the C port msgpack dumping depends on the `c_func_iproto_multireturn` option: * uses `port_c_dump_msgpack()` if set to true (new), * uses `port_c_dump_msgpack_wrapped()` otherwise (old). Needed for #4799 @TarantoolBot document Title: Document `c_func_iproto_multireturn` compat option Please create a documentation page for the new compat option: https://tarantool.io/compat/c_func_iproto_multireturn In the new behaviour, the multiresults returned by a stored C function via iproto aren't wrapped in the additional msgpack array (old). ``` tarantool> compat.c_func_iproto_multireturn = 'old' --- ... tarantool> net_box.connect(box.cfg.listen):call('myclib.cfunc') --- - [true, -1] ... tarantool> compat.c_func_iproto_multireturn = 'new' --- ... tarantool> net_box.connect(box.cfg.listen):call('myclib.cfunc') --- - true - -1 ... ``` The new behaviour is consistent with the local call of the function via `box.func`: ``` tarantool> box.func['myclib.cfunc']:call() --- - true - -1 ... ``` Assume you have a stored C function that returns values like the following: ```c char *position = mp_encode_bool(buffer, true); box_return_mp(ctx, buffer, position); /* ... */ position = mp_encode_int(buffer, -1); box_return_mp(ctx, buffer, position); ``` If you want to preserve the format of the returned array for your C functions, when the `c_func_iproto_multireturn` option is set to "new", you should add the additional wrapping, like the following: ```c char *position = mp_encode_array(buffer_with_results, n_results); position = mp_encode_bool(position, true); /* ... */ position = mp_encode_int(position, -1); box_return_mp(ctx, buffer_with_results, position); ``` The amount of `box_return_mp()` calls indicates the number of values to be returned. Also, you should update its usage via `box.func` if there is any. (cherry picked from commit 96ee6d9b)
-
Pavel Balaev authored
luarocks version updated to version 3.9.2 Closes #6597 NO_DOC=The engine has been updated, the functionality has not changed NO_TEST=see NO_DOC (cherry picked from commit 1dc8cd81)
-
Oleg Babin authored
Before this patch if one called `vinyl`, `sql`, `gc` and `memory` functions from box.info() instance crashed. It's interesting that `replication_anon` functions worked ok. This patch fixes that crashes. Closes #9173 NO_DOC=bugfix (cherry picked from commit d85556c9)
-
- Sep 21, 2023
-
-
Vladimir Davydov authored
When a replica is restarted, it doesn't immediately switch to the 'follow' state. First it needs to sync. Let's wait for the 'follow' state a bit to fix the following failure: NO_WRAP [039] replication-luatest/gh_9049_schema_downgrade_t> [ fail ] [039] Test failed! Output from reject file /tmp/t/rejects/replication-luatest/gh_9049_schema_downgrade.reject: [039] Tarantool version is 3.0.0-alpha3-18-g6892907bad9d [039] TAP version 13 [039] 1..1 [039] # Started on Thu Sep 21 13:55:09 2023 [039] # Starting group: replication-luatest.gh_9049_schema_downgrade [039] not ok 1 replication-luatest.gh_9049_schema_downgrade.test_schema_downgrade [039] # ...st/replication-luatest/gh_9049_schema_downgrade_test.lua:33: expected: "follow" [039] # actual: "sync" [039] # stack traceback: [039] # ...st/replication-luatest/gh_9049_schema_downgrade_test.lua:31: in function 'replication-luatest.gh_9049_schema_downgrade.test_schema_downgrade' [039] # ... [039] # [C]: in function 'xpcall' [039] # artifacts: [039] # replica -> /tmp/t/039_replication-luatest/artifacts/replica-AgoXGWUXxvnc [039] # master -> /tmp/t/039_replication-luatest/artifacts/master-ZUTtyXyAX9YF [039] # Ran 1 tests in 1.768 seconds, 0 succeeded, 1 failed NO_WRAP Fixes commit 71de4b2c ("box: fix schema downgrade replication"). NO_DOC=test fix NO_CHANGELOG=test fix (cherry picked from commit c903b61b)
-
- Sep 18, 2023
-
-
Ilya Verbin authored
If MP_ERROR map contains two MP_ERROR_STACK keys, then the second call to `error_set_prev(effect, cur)' will crash, because `effect' is NULL, but `err == NULL' is false, because it is assigned on the first iteration. This patch raises an error if more than one MP_ERROR_STACK key is present. NO_DOC=bugfix Closes #9136 (cherry picked from commit 990aeee9)
-
- Sep 12, 2023
-
-
Sergey Bronnikov authored
The patch adds a fuzzing test for IPROTO decoding function xrow_decode_error(). Follows up #8921 Follows up #9098 NO_DOC=testing NO_CHANGELOG=testing (cherry picked from commit 2c700aab)
-
Vladimir Davydov authored
Some downgrade operations are performed with disabled system space triggers because they were prohibited recently (creation of SQL built-in functions) or never allowed (dropping a system space). This works fine on the instance running downgrade but apparently fails on replicas. To fix this issue, let's disable the checks the operations that prevent downgrade in the following scenarios: - in the fiber that is currently running a schema upgrade or downgrade; - in the applier fiber so that it can replicate changes done by upgrade or downgrade on the master; - during recovery so that DDL records written to the WAL can be replayed. We already have all the necessary infrastructure in-place - we use it for allowing DDL operations with an old schema for upgrade. Closes #9049 NO_DOC=bug fix (cherry picked from commit 71de4b2c) NOTE: We don't have the commit that disables DDL operations with an old schema in 2.11 so we have to backport bits of it from 3.0, see commit 97c2c9a4 ("box: disable DDL with old schema").
-
- Sep 11, 2023
-
-
Ilya Verbin authored
If `strlen(name)` is 1, `value_size` is 1, and `extra` is 0, then 15 bytes are allocated for `struct error_field` in error_payload_prepare(). However, the size of this structure is 16 because of the padding for the alignment. Thus TRASH() in error_payload_destroy() writes 1 byte beyond the structure. Closes #9098 NO_DOC=bugfix (cherry picked from commit 454ffd13)
-
- Sep 08, 2023
-
-
Sergey Bronnikov authored
The patch adds a fuzzing test for IPROTO decoding function xrow_header_decode(). NO_DOC=testing NO_CHANGELOG=testing (cherry picked from commit ae5964aa)
-
- Sep 07, 2023
-
-
Ilya Verbin authored
An attempt to print a dead fiber raised a fatal error, which is quite unexpected. This patch updates __tostring metamethod of fiber_object so that it pushes the "fiber: <fid> (dead)" string instead of the error. The __serialize metamethod is patched similarly. Closes #4265 NO_DOC=bugfix (cherry picked from commit 3421a3bd)
-
- Sep 05, 2023
-
-
Rimma Tolkacheva authored
Changed `else if` to `elseif`. There was a typo in the serializer that led to unclosed `if` statements. On a set of 50000 protobuf struct samples generates 863 (3% of all errors) fewer errors. NO_CHANGELOG=internal NO_DOC=fuzzer fix (cherry picked from commit 8c1e75e7)
-
Rimma Tolkacheva authored
Added checks before serializing return and break to program if inside returnable or breakable code block. On a set of 50000 protobuf struct samples generates 11749 (42% of all errors) fewer errors. NO_CHANGELOG=internal NO_DOC=fuzzer fix (cherry picked from commit 8df690b8)
-
Rimma Tolkacheva authored
The context object is created to manage the context of Lua program. It will be used in the next commit to check if `break` or `return` is inside a breakable or returnable code block. NO_CHANGELOG=internal NO_DOC=fuzzer fix (cherry picked from commit b7c65039)
-
- Sep 04, 2023
-
-
Ilya Verbin authored
If a lot of tests are running in parallel, 50 sec limit may not be enough. Let's increase it to 120 sec. Closes tarantool/tarantool-qa#273 NO_DOC=test NO_CHANGELOG=test (cherry picked from commit 06be32fb)
-
- Sep 01, 2023
-
-
Vladimir Davydov authored
Historically, we encode strings that contain invalid or non-printable utf-8 sequences in YAML as binary base64 blobs. We do that because of limitations/bugs of the YAML encoder, which refuses to encode invalid utf-8 strings. To work around this issue, we introduced the helper utf8_check_printable, which is basically a copy of yaml_check_utf8, and treat strings for which it fails as binary data (MP_BIN). This commit updates the YAML submodule to the version where all known issues with encoding invalid/unprintable utf-8 strings are fixed and removes special treatment of such strings (drops utf8_check_printable). Now unprintable or invalid utf-8 sequences are emitted as code points, e.g. '\xFF' or '\uFFFF'. This change is a pre-requisite for introducing the new varbinary type to Lua. Without it plain strings would be implicitly converted to varbinary after decoding/encoding them in YAML, which would be confusing. Closes #8756 NO_DOC=bug fix (cherry picked from commit 890a821c)
-
Vladimir Davydov authored
Currently, the zero-width space Unicode character is silently ignored by the YAML encoder but with commit https://github.com/tarantool/libyaml/commit/351108e1ffd5c6296349fa9ab87f91ef8a84c4e7 ("Allow to emit invalid utf-8 scalar strings"), it will print it as a unicode code point, as it should. The fselect helper uses this character to prevent the YAML encoder from quoting the output string. Actually, quoting is triggered by usage of spaces and vertical bars. We already replace spaces with NBSP (U+00A0). Let's also replace vertical bars with Latin Letter Dental Click (U+01C0). It looks the same but has no special meaning to YAML. In the master branch this issue was fixed by removing the use_nbsp option of fselect completely and using multi-line strings instead, see commit f76d3c69 ("box: make fselect return a multi-line string instead of a table"). We can't do that in 2.11 because there the yaml_pretty_multiline compat option is disabled by default and without it multi-line strings look ugly in YAML. Needed for #8756 NO_DOC=no user-visible changes NO_CHANGELOG=no user-visible changes
-
- Aug 30, 2023
-
-
Ilya Verbin authored
For some unknown reason ASAN crashes with SIGSEGV on this test during shutdown. See tarantool/tarantool-qa#324 for details. NO_DOC=test NO_CHANGELOG=test (cherry picked from commit 8c7da931)
-
- Aug 29, 2023
-
-
Alexander Turenko authored
The test starts a child tarantool instance in the current working directory and run box.cfg(). The current working directory is a source directory. test-run.py runs many tests from it in parallel and in some circumstances it appears that the directory is locked by some other box.cfg() call from some other tarantool instance (maybe another test is doing the same). The test is rewritten to use a temporary directory for such runs. The test.interactive_tarantool helper is used for convenience instead of a popen wrapper that is written specifically for the test. NO_DOC=It is a fix of a test. NO_CHANGELOG=see NO_DOC (cherry picked from commit dfa67ae6)
-
Gleb Kashkin authored
Before this patch interactive_tarantool `:read_response()` helper used to just deserialise Lua errors as tables like `[{error = 'msg'}]`. Now it checks if response is actually an error and rethrows it. This provides additional verification for many tests that use interactive_tarantool. This patch is a followup to commit 261a21bd ("test/config: adjust initial permissions in a test"). It provides additional output checks to prevent similar issues. Part of #8967 NO_DOC=test helper update NO_CHANGELOG=test helper update NO_TEST=test helper update (cherry picked from commit 793713e6)
-
Alexander Turenko authored
It is needed to fix a problem in the `config-luatest/credentials_applier` test. See the next commit. NO_DOC=It is a testing helper improvement. NO_CHANGELOG=see NO_DOC NO_TEST=see NO_DOC (cherry picked from commit 130335e4)
-
Gleb Kashkin authored
Sometimes it is useful to have one function to execute command, read and compare response. This patch introduces such function - `roundtrip()` to interactive_tarantool helper. NO_CHANGELOG=test helper change NO_TEST=test helper change NO_DOC=test helper change (cherry picked from commit 5053f286)
-
- Aug 28, 2023
-
-
Nikolay Shirokovskiy authored
Fiber flags are initialized after fiber stack creation. As result currently check for custom stack in fiber_stack_watermark_create does not work. This leads to heap-buffer-overflow on putting watermark if custom stack size is less than FIBER_STACK_SIZE_WATERMARK. Close #9026 NO_DOC=bugfix (cherry picked from commit 750e4890)
-
- Aug 25, 2023
-
-
Ilya Verbin authored
`*type_out` was set to uninitialized value for `field->type == MP_EXT`. This was introduced by commit 9f9142d6 ("box: cleanup on tuple encoding failure") Closes #9023 NO_DOC=bugfix NO_CHANGELOG=not user-visible (cherry picked from commit bbfaef3b)
-
Vladimir Davydov authored
Just to demonstrate that the format argument of ok/is/isnt macros is now optional. NO_DOC=test NO_CHANGELOG=test (cherry picked from commit e13f2bf5)
-
Vladimir Davydov authored
It's really annoying to add a message after each check in a unit test. Let's make this optional. If the message is omitted, "line %d" will be used instead. Also, let's print the expression on failure because it may be useful if exact sources are unavailable. NO_DOC=refactoring NO_CHANGELOG=refactoring (cherry picked from commit 62ae8bf3)
-