- Jul 28, 2017
-
-
Vladislav Shpilevoy authored
In the newest 1.7 the call/auth/dml_request decode the data directly from a struct xrow_header instead of MessagePack data. Make the same for sql_request.
-
Vladislav Shpilevoy authored
obuf_alloc can not be used as a temporary buffer per sql row column, because each column can be allocated in different slabs. It makes impossible to allocate a port tuple from several intervals: [col1_begin, col1_end], [col2_begin, col2_end], ... Region has region_join method, which can realloc memory blocks from different slabs in monolite memory area - [begin, end]. It allows to use tuple_alloc for port tuples. Closes #2602
-
Vladislav Shpilevoy authored
Closes #2601
-
Vladislav Shpilevoy authored
-
Vladislav Shpilevoy authored
The original SQLite doesn't account DDL changes at all. Such changes simply do not update the sqlite3_changes() return value. But iproto clients want to know a result of DDL operation, particularly for IF [NOT] EXISTS DDL operations. We cannot return real count of affected tuples, because it depends on the tarantool version. For example, now DROP TABLE deletes tuples from _space, _index, _truncate and _trigger. But in the future this set of system spaces can be changed. With considering the above remark, lets return always for all DDL operations either 0, if nothing happened, or 1, if something was created, deleted or modified. Closes #2617
-
- Jul 25, 2017
-
-
Kirill Yukhin authored
Reformatted according to Tarantool's coding style. Part of #2628
-
Bulat Niatshin authored
* test/unit/sql-bitvec.test.c - rename to test/unit/sql-bitvec.c * sql-bitvec.c - update from gh-2590-bitvec-test-convert * sql-bitvec.result - update from gh-2590-bitvec-test-convert Closes #2590
-
Kirill Yukhin authored
Introduce dedicated opcode OP_TTRansaction, which is responsible for initiation of Tarantool transaction. This opcode is only emitted if statement is generated directly by parser. That means that changes like insertions into system tables are not covered by Tarantool's transations. Tarantool's transaction is committed or rolled back during exectuin of `Halt` opcode. `CloseAllCursors` function was splitted into two: in order Tarantool's WAL to work need to preserve allocated memory until commit to WAL. Call this deallocation after Tarantool's commit. In future this will be re-worked since transaction can be either in statement or generic, and not all Halts should commit. Also, fix a bug: memory area passed to WAL were re-used. WAL itself doesn't do memcpy, so this state of affairs was lead to unpredictable errors during save/restore. Use region_alloc to reserve memory area for WAL in tarantoolSqlite3Insert and tarantoolSqlite3Delete. Closes #2599
-
- Jul 21, 2017
-
-
Konstantin Osipov authored
-
Konstantin Osipov authored
-
Vladislav Shpilevoy authored
-
Vladislav Shpilevoy authored
-
Vladislav Shpilevoy authored
Now write iterator see only oldest vlsn. Because of it the write iterator can not skip or merge or squash newer statements, even if they are not used by any transactions. For example, consider one key and its lsns: LSNs: 10 20 30 40 50 Read Views: * * * Statements with lsn 40 can be merged with 50; 20 can be merged with 30. Old write iterator will merge nothing in that case, because there is oldest vlsn = 10. Lets allow the write iterator to see all read views, instead of only oldest. Such write iterator can merge multiple lsns subsequences of each key. For the example above it will merge in the following way: LSNs: 10 20 30 40 50 Read Views: * * * Merge and \__/\_________/\________/ return: merge, merge, merge and return each merged result. For the considered case the difference is 3 result statements instead of 5 by the old write iterator. Closes #1920 Closes #2502 Closes #1824 Closes #2578
-
Roman Tsisyk authored
Follow up #2507, needed fir unit tests
-
- Jul 20, 2017
-
-
Vladislav Shpilevoy authored
Closes #2507
-
Vladislav Shpilevoy authored
Part of #2507
-
Roman Tsisyk authored
Closes #2543
-
Roman Tsisyk authored
Disable background and usermode when NOTIFY_SOCKET is set. Closes #2538
-
Roman Tsisyk authored
Admin console should be started before the box.cfg() call. Closes #2079
-
Roman Tsisyk authored
Now module.h is autogenerated automatically on `make all` if one or more source header files have changed. Closes #2481
-
Vladimir Davydov authored
Check that vinyl can recover if vinyl_memory is lowered after restart. In this case it should forcefully use quota and schedule dump after recovery is complete. Needed for #2397
-
Vladimir Davydov authored
Check that: - Empty spaces are recovered correctly. - Data is restored fully, for every index. - In-memory data is not lost. Needed for #2397
-
Vladimir Davydov authored
- Make vinyl/split_coalesce restart the server and check the space content after splitting and coalescing ranges. - Do not split ranges in vinyl/recover test, as it is now tested by vinyl/split_coalesce test. Needed for #2397
-
Vladimir Davydov authored
vinyl/coalesce already tests range splitting, no need in a separate test case. Needed for #2397
-
Vladimir Davydov authored
On space alter (index create/drop) new_space->truncate_count is left unset, which breaks vinyl recovery logic: in vinyl we assume that if index->truncate_count (restored from vylog) > space->truncate_count, the space will be truncated and so there's no need in applying a WAL row (see vy_is_committed_one()). So if an index is dropped or created after truncate, vinyl won't apply statements for it on recovery. Closes #2615
-
- Jul 19, 2017
-
-
Vladimir Davydov authored
An index can be dropped and then recreated with the same space/index id. To discriminate between different incarnations of the same index during recovery, we use index LSN stored in index options, as it is supposed to be unique. However, the uniqueness property doesn't always hold: - If two indexes are created from different fibers, they might receive the same LSN. - If an index is created by inserting a record into _index system space directly, without using the public API, as it is the case in case of logical backup, its LSN might conflict with the LSN of an existing index or a previous incarnation of the same index stored in vylog. These exceptions can result in unrecoverable errors during local recovery, like this one: F> can't initialize storage: Invalid VYLOG file: Duplicate index id 3 Besides, storing LSN in index options is ugly, because LSN isn't a user-defined option - it's a part of the implementation. To fix this issues, let's use the LSN passed to Index::commitCreate, i.e. the actual LSN received by the row that created the index. There's one problem though: snapshot rows don't store LSNs. However, it doesn't mean we can't find the index in vylog corresponding to a snapshot row: we just need to look up the index by space_id/index_id instead of LSN and then compare the snapshot LSN with the LSN of the last index incarnation stored in vylog - if the latter turns out to be less, then we need to load the index, otherwise the index is going to be dropped and we need to load a dummy index. For more details, see the comment to vy_recovery_load_index(). Another issue that needs a clarification is backward compatibility. The thing is the LSN written to the index options lags behind the actual LSN assigned to the row that created the index by 1. So to preserve backward compatibility, we use LSN from index options for legacy indexes that have it, while for indexes created after this patch we don't store LSN in index options (set it to 0), neither do we use it on recovery (use row LSN instead). Closes #2536
-
Vladimir Davydov authored
Currently, 0 is passed to Index::commitCreate as index LSN during initial join. To stop using index_opts->lsn for identifying indexes in Vinyl, we need a unique LSN. So let's install a dummy journal to assign fake unique LSNs for rows received on initial join. Needed for #2536
-
Vladimir Davydov authored
So that we could use it instead of index_opts::lsn. On initial recovery pass the snapshot LSN instead as we don't store LSNs in memtx snapshot. Needed for #2536
-
Vladislav Shpilevoy authored
Reload schema after DDL SQL operations.
-
Vladislav Shpilevoy authored
-
Vladislav Shpilevoy authored
-
Vladislav Shpilevoy authored
-
Vladislav Shpilevoy authored
Closes #2569
-
Vladislav Shpilevoy authored
Implement tuple_arena_create method to initialize tuple arena and quota. This method further will be used to initialize both memtx and vinyl arenas. Write a test showing the limit of vinyl statements size. Part of #2569
-
Alexandr Lyapunov authored
-
Alexandr Lyapunov authored
Now if an error happens during the first tuple push from port to obuf, the port is not actually destroyed - only the first tuple is unreferenced. I believe that port dump must not free any data at all, then once a user creates a port he must take the ownership and destroy it in the end of usage. That would simplify the user code, especially C++. Simplify port_dump function and destroy a port in the code that creates the port.
-
- Jul 18, 2017
-
-
Roman Tsisyk authored
LuaRocks requires openssl and curl in order to download manifest from rocks.tarantool.org. Fixes #2612
-
Roman Tsisyk authored
Fix compatibility with original tarantool/http client. Follow up #2530
-
- Jul 17, 2017
-
-
Vladislav Shpilevoy authored
Closes #2608
-
Roman Tsisyk authored
-