- Nov 16, 2017
-
-
Vladimir Davydov authored
This reverts commit be8ee29a. Taking a reference to the search key in source iterators is pointless - it can't go away while we are using them. The only part of this patch that makes sense is removing the const specifier from vy_point_iterator->key.
-
Vladimir Davydov authored
Closes #2558
-
Ivan Kosenko authored
-
- Nov 15, 2017
-
-
Vladimir Davydov authored
If read of a single statement from vinyl takes more than the value of box.cfg.too_long_threshold, the request will be logged: 512/1: select([1], EQ) => REPLACE([100001, 1], lsn=200006) took too long: 0.626 sec This is useful for debugging. While we are at it, let's also remove 'timeout' from the vinyl engine constructor arguments and set it with box_set_vinyl_timeout() on box initialization instead, similarly to vinyl_max_tuple_size. Closes #2871
-
Vladimir Davydov authored
Use generic tuple_snprint() and tuple_str() instead.
-
Vladimir Davydov authored
The vinyl_iterator struct was introduced as a C++ wrapper around vy_cursor. Since there's no C++ code left in the engine, and both structures are defined in the same file, we can merge them now.
-
Vladimir Davydov authored
The engine infrastructure was initially implemented in C++ so we needed the wrappers to provide C++ API to Vinyl. Now everything is in C so we don't need them any more. Let's fold them in vinyl.c. Note, this patch does not touch vinyl_engine, vinyl_index, and vinyl_iterator structures, they are still there, it just gets rid of the intermediate layer of wrapper functions, which is not needed any more.
-
Vladimir Davydov authored
Accessing configuration from inside an engine implementation violates encapsulation.
-
Roman Tsisyk authored
-
- Nov 13, 2017
-
-
Konstantin Osipov authored
Remove iobuf_is_idle(). It uses obuf.wpos, which itself needs to be removed from obuf.
-
- Nov 10, 2017
-
-
Konstantin Osipov authored
Spare box from iproto I/O to simplify transition of control of output buffer from iproto to tx thread. In scope of gh-946.
-
- Nov 06, 2017
-
-
Roman Tsisyk authored
-
Roman Tsisyk authored
Bloom filter depends on hash function, which depends on ICU version, which may vary.
-
Roman Tsisyk authored
-
Roman Tsisyk authored
-
Roman Tsisyk authored
+ Don't use id=0 for collations Follow up #2649
-
Vladimir Davydov authored
Fix tuple_hash_field() to handle the following cases properly: - Nullable string field (crash in vinyl on dump). - Scalar field with collation enabled (crash in memtx hash index). Add corresponding test cases.
-
Vladimir Davydov authored
First, unique but nullable indexes are not rebuilt when the primary key is altered although they should be, because they can contain multiple NULLs. Second, when rebuilding such indexes we use a wrong key def (index_def->key_def instead of cmp_def), which results in lost stable order after recovery. Fix both these issues and add a test case.
-
Vladimir Davydov authored
Needed to check if the key definition loaded from vylog to send initial data to a replica has the collation properly recovered.
-
Vladimir Davydov authored
It isn't stored currently, but this doesn't break anything, because the primary key, which is the only key whose definition is used after having been loaded from vylog, can't be nullable. Let's store it there just in case. Update the vinyl/layout test to check that.
-
Vladimir Davydov authored
Collations were disabled in vinyl by commmit 2097908f ("Fix collation test on some platforms and disable collation in vinyl"), because a key_def referencing a collation could not be loaded from vylog on recovery (collation objects are created after vylog is recovered). Now, it isn't a problem anymore, because the decoding procedure, key_def_decode_parts(), deals with struct key_part_def, which references a collation by id and hence doesn't need a collation object to be created. So we can enable collations in vinyl. This patch partially reverts the aforementioned commit (it can't do full revert, because that commit also fixed some tests along the way). Closes #2822
-
Vladimir Davydov authored
We can't use key_def_decode_parts() when recovering vylog if key_def has a collation, because vylog is recovered before the snapshot, i.e. when collation objects haven't been created yet, while key_def_decode_parts() tries to look up the collation by id. As a result, we can't enable collations for vinyl indexes. To fix this, let's rework the decoding procedure so that it works with struct key_part_def instead of key_part. The only difference between the two structures is that the former references the collation by id while the latter by pointer. Needed for #2822
-
Georgy Kirichenko authored
Writer fiber should be stopped before re-connect to avoid sending unwanted IPROTO_OK replication acknowledges. Fixes #2726
-
Georgy Kirichenko authored
SUBSCRIBE command is not multiplexed in the binary protocol. When relay exits with an error during subscribe, remote replica still continue to send IPROTO_OK replication acknowledges to the master. These packets are unwanted by IPROTO decoder. Close socket on errors during SUBSCRIBE. Fixes #2726
- Nov 04, 2017
-
-
Vladimir Davydov authored
The corresponding comparator is missing, which leads to a crash. Fix it and add a test case checking that nullable indexes work fine with all available types.
-
Georgy Kirichenko authored
Symbol resolving can be expensive. Introduce an option for fiber.info(): fiber.info({ backtrace = true }) fiber.info({ bt = true }) Fixes #2878
-
Ilya authored
- Change signature of function access_check_func. Now it returns status instead of function. Close #2816
-
- Nov 03, 2017
-
-
Vladimir Davydov authored
> src/tarantool/src/box/vinyl.c:2111:33: error: initializer element is not a compile-time constant > static const double weight = 1 - exp(-VY_QUOTA_UPDATE_INTERVAL / > ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Remove the "static" qualifier. It is not really needed as any sane compiler will pre-calculate the value of 'weight' at compile time (checked on gcc 6.3.0 with -O0).
-
Vladimir Davydov authored
- Remove vy_stat::rmean statistics, which were left from Sophia, as now we have per index statistics which are much more verbose than those. - Move vy_stat::dump_bw to vy_env and remove struct vy_stat as there's nothing left in it. - Move quota statistics from box.info.vinyl().performance.memory to box.info.vinyl().quota. Remove 'ratio', which equals used / limit, as this kind of calculations should be done by a script aggregating statistics. Report 'use_rate' and 'dump_bandwidth' there. - Report 'limit' in cache statistics to make them consistent with 'quota' statistics, where 'limit' is reported. Rename 'cache.count' to 'cache.tuples'. Remove vy_cache_env::cache_count, use mempool stats instead. - Move 'tx_allocated', 'txv_allocated', 'read_interval', 'read_view' from box.info.vinyl().performance to box.info.vinyl().tx and name them 'transactions', 'statements', 'gap_locks', and 'read_views', respectively. Remove vy_tx_stat::active and 'tx.active' as the same value is shown by 'tx.transactions', extracted from the mempool. - Zap box.info.vinyl().performance - there's nothing left there. Now global statistics look like: tarantool> box.info.vinyl() --- - cache: limit: 134217728 tuples: 32344 used: 34898794 tx: conflict: 1 commit: 324 rollback: 13 statements: 10 transactions: 3 gap_locks: 4 read_views: 1 quota: dump_bandwidth: 10000000 watermark: 119488351 use_rate: 1232703 limit: 134217728 used: 34014634 ... Closes #2861
-
Vladimir Davydov authored
We have a timer for updating watermark every second. Let's reuse it for quota use rate calculation. This will allow us to get rid of legacy vinyl statistics. Also, let's use EWMA for calculating the average. It is a more efficient and common method, which allows to easily tune the period over which the value is averaged.
-
Roman Tsisyk authored
Follow up #1557
-
- Nov 02, 2017
-
-
Alexandr Lyapunov authored
Collation was simply ignored for non-string parts, that could confuse potential user. Generate a readable error in this case. Fix #2862 part 2
-
Alexandr Lyapunov authored
Now collation is silently ignored for type='scalar' parts. Use collation for string scalar fields. Fix #2862 part 1
-
Alexandr Lyapunov authored
Show collation name (if present) in space.index.name.parts[no]. Fix #2862 part 4
-
Alexandr Lyapunov authored
test:create_index('unicode_s1', {parts = {{1, 'STR', collation = 'UNICODE'}}}) will work now. Fix #2862 part 3
-
Vladislav Shpilevoy authored
If a field is not indexed and no more indexed or not nullable fields after that, than allow to skip it in insertion. Such field value looks like MP_NIL, but MP_NIL is not explicitly stored. Named access to this field in lua returns nil. Example: format = {{'field1'}, {'field2'}, {'field3', is_nullable = true}, {'field4', is_nullable = true}} t = space:insert{1, 2} -- ok. t.field1 == 1, t.field2 == 2, t.field3 == nil, t.field4 == nil Closes #2880
-
Vladislav Shpilevoy authored
Some users store in format fields their custom keys. But current opts parser does not allow to store any unknown keys. Lets allow it. Example: format = {} format[1] = {name = 'field1', type = 'unsigned', custom_field = 'custom_value'} s = box.schema.create_space('test', {format = format}) s:format()[1].custom_field == 'custom_value' Closes #2839
-
Vladimir Davydov authored
Using DML/DDL on a Vinyl index with wal_mode = 'none' is likely to result in unrecoverable errors like: F> can't initialize storage: Invalid VYLOG file: Index 512/0 created twice To avoid data corruption in case the user tries to use an existing Vinyl database in conjunction with wal_mode = 'none', let's explicitly forbid it until we figure out how to fix it. Workaround #2278
-
Vladimir Davydov authored
During initial join, a replica receives all data accumulated on the master for its whole lifetime, which may be quota a lot. If the network connection is fast enough, the replica might fail to keep up with dumps, in which case replication fails with ER_VY_QUOTA_TIMEOUT. To avoid that, let's ignore quota timeout until bootstrap is complete. Note, replication may still fail during the 'subscribe' stage for the same reason, but it's unlikely, because the rate at which the master sends data is limited by the number of requests served by the master per a unit of time, and it should become nearly impossible once throttling is introduced (See #1862). Closes #2873
-