- Nov 14, 2016
-
-
bigbes authored
* added argparse module. Internal, for now (internal.argparse) * added cat/play commands for tarantoolctl (with tests)
-
Alexandr Lyapunov authored
* add assert instead of useless code * add huge comment * fix gh-1899 finally
-
Nick Zavaritsky authored
Adding gh-1904 tests. No fixes since 1.7 has new net.box.
-
Nick Zavaritsky authored
-
- Nov 13, 2016
-
-
Nick Zavaritsky authored
* :close() didn't stop reconnect activity; * cancelling a fiber in the ceratin request stage leads to deadlock in subsequent :close().
-
- Nov 10, 2016
-
-
Vladimir Davydov authored
The test starts 5000 fibers each of which sends 20 requests in two batches via iproto. After that, it injects a 5 seconds delay to WAL and then waits until all the fibers have completed. The test takes about 20 seconds, so it's marked as long. Intended to catch bugs similar to #1439, #1892.
-
Konstantin Osipov authored
If a message arrives when there is no output for the connection and the IPROTO_MSG_MAX limit is hit, the input will never be processed unless the other end writes more data to the socket. To make sure a throttled connection will be woken up eventually when the number of pending requests drops below IPROTO_MSG_MAX, let's link all throttled connections in a list and wake the oldest element from it whenever a messages is freed. The issue was initially attempted to be fixed by commit 52b47951 ("Don't stop connection if there is no pending requests") by allowing to exceed the IPROTO_MSG_MAX limit. That commit, however, introduced the possibility of a deadlock due to depleting the fiber pool, which was "resolved" by commit 9492cddb ("iproto: fix IPROTO_MSG_MAX check") while reintroducing the original issue. Patch by Vladimir Davydov
-
Vladimir Davydov authored
We can gather all the stats we need at run time.
-
Vladimir Davydov authored
* histogram_discard() to remove previously added observations * histogram_snprint() to dump a histogram to a string buffer Required for maintaining a histogram of number of runs per range in vinyl.
-
Roman Tsisyk authored
Fix compilation warnings with disable assertions
-
Roman Tsisyk authored
-
Vladimir Davydov authored
Creating only one file per range, as we do now, is inflexible, because - we can't easily coalesce two ranges from the tx thread - it's unclear how to implement multi-level design without introducing holes in range files So this patch switches vinyl to file-per-run design, where each run has its own file and a file descriptor to access it. Files are named as follows: <lsn>.<range_id>.<run_no>.{run,data}. The new name component, <run_no> is the serial number of the run in the range, starting from 0. As before, we start recovery from ranges with higher ids. We recover runs of the same range in the same order they were dumped. Range boundaries are stored in each run file.
-
Konstantin Osipov authored
-
Georgy Kirichenko authored
errno returned via errorno member, not in result
-
Alexandr Lyapunov authored
Fix #1899
-
Georgy Kirichenko authored
fio_filename replace errno by readlink call and can be used for error logging
-
- Nov 09, 2016
-
-
Vladislav Shpilevoy authored
ANY - internal field type used for filling not indexed fields in struct tuple_format.fields. So the type ANY must be forbidden for external access and must not be used anywhere except struct tuple_format.fields. Closes #1897
-
Vladislav Shpilevoy authored
Vinyl had its own implementation of comparators functions, because vinyl statements were different by layout from box tuples. * Change the `struct vy_stmt` layout to be similar to `struct tuple` layout. * Create vy_index->format based on vy_index->key_def and remove key_map. * Use comparators from tuple_compare.h. See #1572
-
Roman Tsisyk authored
* Rename INDEX_OFFSET to TUPLE_INDEX_BASE * Use `fieldno` variables for field numbers * Update comments and clean up code
-
Vladislav Shpilevoy authored
In the tuple.h comparators only for 'struct tuple' were declared. This commit provides comparators that can work with raw data. Thus new comparators can be used in vinyl.c. See #1572, stage 3.
-
- Nov 03, 2016
-
-
Vladimir Davydov authored
We shouldn't allow more than IPROTO_MSG_MAX requests, because this can result in depleting the tx fiber pool (FIBER_POOL_SIZE) and, as a result, a deadlock (e.g. WAL needs a fiber to wake up another fiber waiting for write to complete). The IPROTO_MSG_MAX check was effectively disabled by commit 52b47951 ("Don't stop connection if there is no pending requests"): > --- a/src/box/iproto.cc > +++ b/src/box/iproto.cc > @@ -590,7 +590,10 @@ iproto_connection_on_input(ev_loop *loop, struct ev_io *watcher, > try { > /* Ensure we have sufficient space for the next round. */ > struct iobuf *iobuf; > - if (mempool_count(&iproto_msg_pool) > IPROTO_MSG_MAX || > + if ((mempool_count(&iproto_msg_pool) > IPROTO_MSG_MAX && > + /* Don't stop connection if there is no pending requests */ > + (ibuf_used(&con->iobuf[0]->in) > con->parse_size || > + ibuf_used(&con->iobuf[1]->in))) || > (iobuf = iproto_connection_input_iobuf(con)) == NULL) { > > ev_io_stop(loop, &con->input); > > (ibuf_used(&con->iobuf[0]->in) > con->parse_size || > ibuf_used(&con->iobuf[1]->in)) because (ibuf_used(&con->iobuf[0]->in) > con->parse_size || ibuf_used(&con->iobuf[1]->in)) is almost always false, since iproto_enqueue_batch() parses and flushes all available input so that both iobufs are empty and the parse_size is typically 0. It looks like the problem the above-mentioned commit tried to address is different. The thing is that mempool_count(&iproto_msg_pool) accounts not only active requests, but also disconnect messages allocated for each connection in advance. As a result, if there were more than IPROTO_MSG_MAX (768) connections, iproto would get stuck forever. That said, the true fix would be subtracting the number of connections from the number of objects allocated from iproto_msg_pool for the check. Closes #1892
-
Vladimir Davydov authored
When restoring read iterator, we reopen range iterator with key equal to the last seen statement. This is incorrect for eq order and partial initial key. On restore we should position range iterator to the original range without changing it->key or it->order.
-
Georgy Kirichenko authored
xlog_create() depend on xdir and we need a good name for similar function without xdir dependency. Needed #1720
-
Roman Tsisyk authored
Follow up the previous patch.
-
Georgy Kirichenko authored
Needed for #1720
-
Roman Tsisyk authored
* Inline vy_range_cmp and vy_range_cmpnode to remove double inversion of comparison logic * Streamline vy_stmt_compare_raw() * Rename API functions * Fix comments
-
Vladislav Shpilevoy authored
See #1572
-
Vladislav Shpilevoy authored
vy_stmt_compare is split into the set of functions for comparison * any type statements * any type statement with an action statement (REPLACE, DELETE, UPSERT) * any type statement with a key statement (DELETE, SELECT) * an action statement with another action * a key statement with another key See #1572 stage 3 point 1
-
- Nov 02, 2016
-
-
bigbes authored
Closes #1852
-
- Nov 01, 2016
-
-
Alexandr Lyapunov authored
-
Roman Tsisyk authored
-
Alexandr Lyapunov authored
Closes #1755
-
Roman Tsisyk authored
-
Alexandr Lyapunov authored
-
Alexandr Lyapunov authored
-
Vladimir Davydov authored
To be used as an indicator of exception. From now on one should write if (fiber_join(...)) // or cord_join(...) diag_raise(); instead of fiber_join(...); diag_raise(); Now we can make diag_raise() assert that diag is not empty. Closes #1847
-
Vladimir Davydov authored
-
Vladimir Davydov authored
vy_checkpoint() expects diag to be set on any dump/compact error, otherwise it crashes. Closes #1884
-
Georgy Kirichenko authored
See #1720
-
Vladimir Davydov authored
- make them add all runs and mems in a loop - remove is_mutable and control_eof arguments
-