- Mar 18, 2020
-
-
Oleg Babin authored
This patch introduces "current" function for sequences. It returns the last retrieved value of specified sequence or throws an error if no value has been generated yet. This patch partially reverts 3ff1f1e3 (box: remove sequence_get) here similar function "get" was removed to avoid possible misleading with "currval" function of PosgreSQL that returns the last obtained value of the sequence in the scope of current session. In contrast "current" returns the last globally retrieved value of the sequence. Closes #4752 Reviewed-by:
Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Reviewed-by:
Nikita Pettik <korablev@tarantool.org> @TarantoolBot document Title: sequence:current() This patch introduces "current" function for sequences. It returns the last retrieved value of specified sequence or throws an error if no value has been generated yet ("next" has not been called yet or right after "reset" is called). Lua: Example: ```lua sq = box.schema.sequence.create('test') --- ... sq:current() --- - error: Sequence 'test' is not started ... sq:next() --- - 1 ... sq:current() --- - 1 ... sq:set(42) --- ... sq:current() --- - 42 ... sq:reset() --- ... sq:current() -- error --- - error: Sequence 'test' is not started ... ``` C API: ```C int box_sequence_current(uint32_t seq_id, int64_t *result); ``` Where: * seq_id - sequence identifier; * result - pointer to a variable where the current sequence value will be stored on success. Returns 0 on success and -1 otherwise. In case of an error user could get it via `box_error_last()`.
-
- Mar 17, 2020
-
-
Chris Sosnin authored
Absence of the body in the unprepare response forces users to perform additional checks to avoid errors. Adding an empty body fixes this problem. Closes #4769 Reviewed-by:
Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Reviewed-by:
Nikita Pettik <korablev@tarantool.org>
-
Chris Sosnin authored
It is needed for performing iproto tests in Lua. Needed for #4769 Reviewed-by:
Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Reviewed-by:
Nikita Pettik <korablev@tarantool.org>
-
Igor Munkin authored
Since this build flag has been removed as a result of reverting the tarantool/luajit@d4e985a, its definition in the corresponding Tarantool cmake file is irrelevant. Furthermore, considering the breakage faced in #4770 the following tests are introduced: * the check whether space __pairs metamethod is set to space.pairs to create a Lua Fun iterator that handles __pairs manually underneath. * the check whether pairs builtin behaviour doesn't change when __pairs is set e.g. on space object. Follow-up #4560 Closes #4770 Reviewed-by:
Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Signed-off-by:
Igor Munkin <imun@tarantool.org>
-
- Mar 16, 2020
-
-
Vladislav Shpilevoy authored
In #4684 it was found that box.tuple.* contained some private functions: bless(), encode(), and is(). Bless() and encode() didn't make any sense for a user, so they were hidden into box.internal.tuple.*. But box.tuple.is() is actually a useful thing. It is harnessed in the tests a lot, and is likely to be already used by customers, because it is available in box.tuple.* for a long time. It is a matter of time when someone will open a doc ticket saying that box.tuple.is() is not documented. The patch makes it legally public. Follow-up #4684 @TarantoolBot document Title: box.tuple.is() ```Lua box.tuple.is(object) ``` A function to check whether a given object is a tuple cdata object. Returns true or false. Never raises nor returns an error.
-
Vladislav Shpilevoy authored
box.tuple.bless, .encode, and .is are internal. Their behaviour is not documented, and they may omit some checks for the sake of speed, and can crash if used without thinking. Nonetheless, despite they are not documented, curious users could notice them in box.tuple.* output via autocompletion, for example. And they could try to use them. This is not ok. box.tuple.bless() being called by a user leads either to a crash, or to a leak (because it is basically tuple reference counter increment). box.tuple.encode() is kind of a wrapper around msgpack, and users should not touch it. It may change, may be removed. And is just makes no sense except some rare cases in schema.lua. bless() and encode() were used in schema.lua only, so the patch simply moves them to box.internal.tuple. box.tuple.is() is kept as is, because - this is used in the tests a lot; - it is totally safe; - that function actually makes sense, and some users could have already started using it. There is no a test, since nothing to test - bless() is not available for users anymore (assuming no one is brave enough to rely on box.internal). Closes #4684
-
Cyrill Gorcunov authored
Basic test for popen engine Signed-off-by:
Cyrill Gorcunov <gorcunov@gmail.com>
-
Cyrill Gorcunov authored
Due to os specifics we can't call setsid after vfork on macos (vfork is not longer a part of posix btw). Instead we can use ioctl to clear the session, then initiate a new process group. Signed-off-by:
Cyrill Gorcunov <gorcunov@gmail.com>
-
Cyrill Gorcunov authored
This helps to identify if something gone wrong inside a child process. Signed-off-by:
Cyrill Gorcunov <gorcunov@gmail.com>
-
Cyrill Gorcunov authored
On error path we arm diag with error but strictly speaking some users (such as unit tests) do not have to access diag for logging. Thus log it explicitly for debug sake. Signed-off-by:
Cyrill Gorcunov <gorcunov@gmail.com>
-
Cyrill Gorcunov authored
Signed-off-by:
Cyrill Gorcunov <gorcunov@gmail.com>
-
Cyrill Gorcunov authored
This is part of posix standart. Signed-off-by:
Cyrill Gorcunov <gorcunov@gmail.com>
-
Cyrill Gorcunov authored
We need it inside popen engine to be able to print errors from inside of a child process. Signed-off-by:
Cyrill Gorcunov <gorcunov@gmail.com>
-
Chris Sosnin authored
This code is called from C, so it shouldn't throw. Closes #4753 Reviewed-by:
Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Reviewed-by:
Nikita Pettik <korablev@tarantool.org>
-
Vladislav Shpilevoy authored
CREATE TABLE used to check column name duplicates before going to box. But it is not necessary, because the same check is done by box. Reviewed-by:
Nikita Pettik <korablev@tarantool.org>
-
Olga Arkhangelskaia authored
Use 'filename' grep_log() option instead of custom log search. Reviewed-by:
Alexander Turenko <alexander.turenko@tarantool.org>
-
- Mar 12, 2020
-
-
Alexander Turenko authored
Add filename option to grep_log() (#106). The option can be used when it is not possible to grab 'box.cfg.log' value from a tarantool instance: say, when the instance is stopped or crashed. Usage: | local test_run = require('test_run').new() | test_run:grep_log(node, what, bytes, {filename = <...>})
-
- Mar 10, 2020
-
-
Vladislav Shpilevoy authored
Original port_tuple in C has 'int size;' field. It was 'size_t size' in Lua. Since sizeof(size_t) usually is 8, and sizeof(int) is 4, this was a really bad typo.
-
Olga Arkhangelskaia authored
When tarantool tries to recover rtree from a snapshot and memtx_memory value is lower than it has been when the snapshot was created, server suffers from segmentation fault. This happens because there is no out of memory error handling in rtree lib. In another words, we do not check the result of malloc operation. The execution flow in case of recovery uses different way and the secondary keys are build in batches. That way has no checks and reservations. The patch adds memtx_rtree_index_reserve implementation to make sure that any memory allocation in rtree will fail. Although this gives us no additional optimization as in case of memtx_tree, the memory reservation prevents tarantool from segmentation fault. If there is not enough memory to be reserved server will fail gently with the "Failed to allocate" error message. Closes #4619
-
- Mar 08, 2020
-
-
Maria authored
Despite what was stated in the documentation, netbox.connect was not always equivalent to netbox.self. In particular, they converted tuple to different types - table and cdata respectively. The patch fixes the issue and covers all cases where netbox.self and connect perform conversion of types - e.g., for box.error. Closes #4513
-
- Mar 06, 2020
-
-
Vladislav Shpilevoy authored
In 89c73e64 ("fio: respect $TMPDIR in fio.tempdir(), when it is set") was added a test checking that fio.tempdir() returns a path to a folder, stored by a path specified in $TMPDIR environment variable. Check was done by calling Lua returned_path:find(tmpdir_path). If tmpdir path contained 'special' characters such as '.', it didn't match, because string.find() takes a regular expression, not just a string. string.startswith() works fine. Follow-up #4794
-
- Mar 05, 2020
-
-
Chris Sosnin authored
All lua types feature check, push and is functions. We expose lua_checktuple for full consistency. Closes #2553
-
Kirill Yukhin authored
- Make string to number conversions fail on NUL char.
-
Kirill Yukhin authored
- gdb: adjust the extension to be used with Python 2 - gdb: introduce luajit-gdb extension
-
Vladislav Shpilevoy authored
TMPDIR is an environment variable used to tell what a directory should be used to create temporary files. It is described in the POSIX standard, and should be used by programs creating temporary files. Closes #4794 @TarantoolBot document Title: fio.tempdir() $TMPDIR fio.tempdir() stores created temporary directory into /tmp by default. This can be changed by setting TMPDIR environment variable. Before starting Tarantool, or at runtime by os.setenv().
-
Serge Petrenko authored
libcurl has a built-in threaded resolver used for asynchronous DNS requests, however, when DNS server is slow to respond, the request still hangs tarantool until it is finished. The reason is that curl calls thread_join on the resolving thread internally upon timeout, making the calling thread hang until resolution has ended. Use c-ares as an asynchronous resolver instead to eliminate the problem. Closes #4591
-
Maria authored
It was possible to leak user password through setting 'replication' configuration option in first box.cfg invocation. This happened due to unconditional logging in load_cfg function. The patch introduces conditional logging. Closes #4493
-
- Mar 04, 2020
-
-
Roman Khabibov authored
Extend <ALTER TABLE> statement to drop table constraints by their names. Closes #4120 @TarantoolBot document Title: Drop table constraints in SQL Now, it is possible to drop table constraints (PRIMARY KEY, UNIQUE, FOREIGN KEY, CHECK) using <ALTER TABLE table_name DROP CONSTRAINT constraint_name> statement by their names. For example: tarantool> box.execute([[CREATE TABLE test ( a INTEGER PRIMARY KEY, b INTEGER, CONSTRAINT cnstr CHECK (a >= 0) );]]) --- - row_count: 1 ... tarantool> box.execute('ALTER TABLE test DROP CONSTRAINT cnstr;') --- - row_count: 1 ... The same for all the other constraints.
-
Roman Khabibov authored
Remove function box_index_by_name() from parser to avoid selects during parsing. Add the ability to choose index during VDBE code compilation which will be used to find the tuple to drop from a system space. Needed for #4120
-
Roman Khabibov authored
Clarify the error message for better user handling. Add the name of space where the constraint under dropping wasn't founded. Part of #4120
-
- Mar 03, 2020
-
-
Serge Petrenko authored
When checking wheter rejoin is needed, replica loops through all the instances in box.cfg.replication, which makes it believe that there is a master holding files, needed by it, since it accounts itself just like all other instances. So make replica skip itself when finding an instance which holds files needed by it, and determining whether rebootstrap is needed. We already have a working test for the issue, it missed the issue due to replica.lua replication settings. Fix replica.lua to optionally include itself in box.cfg.replication, so that the corresponding test works correctly. Closes #4759
-
- Mar 02, 2020
-
-
Serge Petrenko authored
We have a mechanism for restoring rows originating from an instance that suffered a sudden power loss: remote masters resend the isntance's rows received before a certain point in time, defined by remote master vclock at the moment of subscribe. However, this is useful only on initial replication configuraiton, when an instance has just recovered, so that it can receive what it has relayed but haven't synced to disk. In other cases, when an instance is operating normally and master-master replication is configured, the mechanism described above may lead to instance re-applying instance's own rows, coming from a master it has just subscribed to. To fix the problem do not relay rows coming from a remote instance, if the instance has already recovered. Closes #4739
-
Serge Petrenko authored
Add a filter for relay to skip rows coming from unwanted instances. A list of instance ids whose rows replica doesn't want to fetch is encoded together with SUBSCRIBE request after a freshly introduced flag IPROTO_ID_FILTER. Filtering rows is needed to prevent an instance from fetching its own rows from a remote master, which is useful on initial configuration and harmful on resubscribe. Prerequisite #4739, #3294 @TarantoolBot document Title: document new binary protocol key and subscribe request changes Add key `IPROTO_ID_FILTER = 0x51` to the internals reference. This is an optional key used in SUBSCRIBE request followed by an array of ids of instances whose rows won't be relayed to the replica. SUBSCRIBE request is supplemented with an optional field of the following structure: ``` +====================+ | ID_FILTER | | 0x51 : ID LIST | | MP_INT : MP_ARRRAY | | | +====================+ ``` The field is encoded only when the id list is not empty.
-
Serge Petrenko authored
There is an assertion in vclock_follow `lsn > prev_lsn`, which doesn't fire in release builds, of course. Let's at least warn the user on an attempt to write a record with a duplicate or otherwise broken lsn, and not follow such an lsn. Follow-up #4739
-
Serge Petrenko authored
is_orphan status check is needed by applier in order to tell relay whether to send the instance's own rows back or not. Prerequisite #4739
-
- Feb 28, 2020
-
-
Alexander Turenko authored
Found another problem with the test: | /builds/DtQXhC5e/0/tarantool/tarantool/test/unit/popen.c:63:6: | error: variable 'rc' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized] | if (handle == NULL) | ^~~~~~~~~~~~~~ Decided to revert it and fix in background. This reverts commit 40a51647.
-
Alexander Turenko authored
Found another problem with the test: | /builds/DtQXhC5e/0/tarantool/tarantool/test/unit/popen.c:63:6: | error: variable 'rc' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized] | if (handle == NULL) | ^~~~~~~~~~~~~~ Decided to revent the test and so revent its disabling. This reverts commit bceaf05c.
-
Cyrill Gorcunov authored
This test is buggy, need to rewrite. Thus to not block other developers which refer the master branch just disable it. The test was added in 40a51647 ('test: unit/popen'). Signed-off-by:
Cyrill Gorcunov <gorcunov@gmail.com> Reviewed-by:
Alexander Turenko <alexander.turenko@tarantool.org>
-
Cyrill Gorcunov authored
Fix for commit f58cb606 ('popen: introduce a backend engine'). Signed-off-by:
Cyrill Gorcunov <gorcunov@gmail.com> Reviewed-by:
Alexander Turenko <alexander.turenko@tarantool.org>
-