- Jun 06, 2022
-
-
Vladimir Davydov authored
The graceful shutdown protocol works as follows: 1. The server sends a shutdown request (the box.shutdown event) to all its clients that subscribed to it. 2. Upon receiving a shutdown request, a client is supposed to close its connection. 3. The server waits for all clients subscribed to box.shutdown event to exit. 4. The server exits. In net.box, the box.shutdown event is processed by `remote._callback`. The problem is it may occur that `remote._callback` is garbage collected while the `remote` object isn't. If this happens, the shutdown request will never get processed, and the server won't exit until the `remote` object is garbage collected, which may take forever. Let's fix this issue by breaking the worker loop if we see that the callback was garbage collected. Closes #7225 NO_DOC=bug fix
-
- Jun 02, 2022
-
-
Boris Stepanenko authored
nixos (and probably some other distributives) place zoneinfo directory not in /usr/share (in /etc for example). TZDIR is set accordingly. Currently zoneinfo is looked for in /usr/share, disregarding TZDIR env variable. This commit adds compile definition for TZDIR if such env variable is defined. This fixes zoneinfo lookup for nixos. NO_CHANGELOG=build NO_DOC=build NO_TEST=build
-
Vladimir Davydov authored
This reverts commit 33830978. Follow-up #6477 NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Vladimir Davydov authored
This reverts commit 9d1f9f0e. Follow-up #6477 NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Vladimir Davydov authored
Two things we need to do to fix build with OpenSSL 3.0: 1. Use EVP_MAC_* functions instead of HMAC_* https://www.openssl.org/docs/man3.0/man3/HMAC_CTX_new.html 2. Load the Legacy provider to enable legacy algorithms, such as MD4 https://wiki.openssl.org/index.php/OpenSSL_3.0#Programming_in_OpenSSL_3.0 Closes #6477 NO_DOC=build fix NO_TEST=build fix NO_CHANGELOG=build fix
-
Vladimir Davydov authored
We redefine ssl_init and ssl_free in the EE build, because we need to do some extra work there. Currently, it's fine to duplicate the bulk of the OpenSSL library initialization code between EE and CE repositories, but with the introduction of OpenSSL 3.0 it's going to become more complicated so duplicating would look bad. Let's move the common code to ssl_init_impl() and ssl_free_impl() helper functions. Needed for #6477 NO_DOC=refactoring NO_TEST=refactoring NO_CHANGELOG=refactoring
-
Vladimir Davydov authored
ERR_error_string adds some extra information that depends on the OpenSSL library version (code, module, method). This information says nothing to the end user, and it results in different test results after updating to OpenSSL 3.0. Let's use ERR_reason_error_string instead, which just prints a human-readable error message. Part of #6477 NO_DOC=minor change in error message NO_CHANGELOG=minor change in error message
-
Vladimir Davydov authored
openssl_err_str is used for reporting OpenSSL errors. It calls crypto_ERR_* functions using FFI. There's a typo in the code: ffi.crypto_ERR_error_string is used instead of ffi.C.*. We don't normally step on this, because OpenSSL doesn't return errors in our configuration, but if it did for some reason (e.g. a cipher was disabled in the library), we'd get a confusing error message. NO_DOC=bug fix NO_TEST=occur only on internal error NO_CHANGELOG=occur only on internal error
-
- Jun 01, 2022
-
-
artembo authored
Added 'tarantool/actions/cleanup' action to each job which uses self-hosted runners. The action cleans workspace directory of self-hosted runner after previous run. The main reason to add this action is 'Need a single revision' error [1] caused by a conflict of submodule versions, the standard 'actions/checkout' action fails with this error. It's a well-known problem and related issue [2] is still opened. [1] https://github.com/tarantool/tarantool-qa/issues/145 [2] https://github.com/actions/checkout/issues/418 NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci Closes tarantool/tarantool-qa#145
-
Andrey Saranchin authored
This patch introduces not thread-safe low resolution monotonic clock, based on interval timer. It should be used only by thread that initialized it. Part of #6085 NO_CHANGELOG=internal feature NO_DOC=internal feature
-
Andrey Saranchin authored
Since the use of sigprocmask() is unspecified in a multithreaded process we should use pthread_sigmask() instead. This patch replaces all the sigprocmask calls with pthread analogue. NO_TEST=refactoring NO_CHANGELOG=refactoring NO_DOC=refactoring
-
Yaroslav Lobankov authored
To ensure that regular and GC64 jobs in packaging workflows don't overwrite artifacts of each other, we need to use a different artifact name per job. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
In PR #7090 we forgot to update the path to gather failure artifacts for many packaging workflows. Now it is fixed. NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Alexander Turenko authored
GitHub suggests to look on the document, when it is present. The banner is shown for visitors of issues and pull requests pages. We can use this feature to highlight typical stones on the contributor's road. My goal is to leave suggestions for typical points of a confusion in a short document (don't bury into details) and leave links for further reading. I hope we should move most of content of the 'open a pull request' section to a wiki page and possibly merge it with [1] and [2]. It requires more work and I would consider it as a future step toward good developer guidelines. [1]: https://github.com/tarantool/tarantool/wiki/Code-review-procedure [2]: https://www.tarantool.io/en/doc/latest/dev_guide/developer_guidelines NO_CHANGELOG=not a user visible change NO_DOC=nothing requires an update on the website NO_TEST=it is purely documentation change
-
- May 31, 2022
-
-
Serge Petrenko authored
Introduce helpers for each of our custom extension types. The helpers will be used by mp_check() to validate extension contents and make sure no malformed data is accepted by tarantool. Closes #6857 NO_DOC=no user visible changes
-
Serge Petrenko authored
The inject remote method is used in testing quite a lot. For example, when someone needs to pass arbitrary MsgPack to Tarantool. The current way to use it is: conn:_request(netbox._method.inject, opts, nil, nil, custom_msgpack) This is quite long and ugly, so let's add a helper: conn:_inject(custom_msgpack, opts) Also, while we're at it, lets fix the following issue. The _inject remote method is barely usable without knowing which sync net.box will use for the next request. On the one hand, the user has to encode some custom sync to the request he's injecting. On the other hand, net.box doesn't parse the custom sync and always uses its own pre-generated one to wait for the request response. So the user has to pick the correct sync value, which net.box uses internally. Let's make life simpler and introduce _next_sync method, which returns the next sync, which will be used by net.box. In-scope-of #6857 Closes #7177 NO_DOC=internal change NO_CHANGELOG=internal change NO_TEST=tested implicitly in next commit
-
Vladimir Davydov authored
A Tarantool server is supposed to send a greeting message right after accepting a new client so the first thing an applier does after connecting to the master is reads the greeting. It does this without timeouts. The problem is that if by mistake we connect to a wrong instance, which doesn't send anything to clients, the applier will hang forever (until the remote closes the socket), without logging any errors. This may happen even with a valid Tarantool instance - if SSL encryption is enabled on the master, but not on the client, because the SSL protocol assumes that the client initiates a connection by writing to the socket first (before the server). Let's add a timeout to the operation reading the greeting. The timeout is set to replication_disconnect_timeout(), after which a connection is broken if the master doesn't send heartbeats for that long. Note, we don't add a timeout to other read/write operations issued to initiate a replication connection, because if we received a greeting and it's valid, then the master is likely to be fine. Closes #7204 NO_DOC=bug
-
Georgiy Lebedev authored
The upgrade test worked incorrectly: the instances WAL directory contained xlog with the latest schema version and the snapshot contained an older schema version (2.7.1) than required (2.9.1), whereas there only need to be a snapshot with 2.9.1 schema version — fix this descrepancy. Also, schema upgrade is performed automatically: remove the redundant `box.schema.upgrade` call. NO_CHANGELOG=test fix NO_DOC=test fix NO_DOC=test fix
-
- May 30, 2022
-
-
Oleg Babin authored
Commit b18dd47f ("Introduce backtrace=true option to fiber.info()") introduced a way to skip backtraces in fiber.info() calls. Commit 9da7e03e ("fiber: introduce fiber_o:info() and fiber_o:csw()") introduced `options` function for fiber object however it ignored passed options. This patch fixed it. Currently fiber:info({backtrace = false}) returns info without backtrace. Closes #7210 NO_DOC=bugfix
-
- May 26, 2022
-
-
Yaroslav Lobankov authored
- Ubuntu Groovy Gorilla (20.10) - Ubuntu Hirsute Hippo (21.04) See for details: https://wiki.ubuntu.com/Releases NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
Yaroslav Lobankov authored
- Fedora 30 - Fedora 31 - Fedora 32 - Fedora 33 See for details: https://docs.fedoraproject.org/en-US/releases/eol NO_DOC=ci NO_TEST=ci NO_CHANGELOG=ci
-
- May 25, 2022
-
-
Timur Safin authored
FreeBSD Tarantool port has some problems if build uses cmake' ExternalProject_Add which refers to the github repository. Sumodule works better - so switching to using it. NO_CHANGELOG=build NO_DOC=build NO_TEST=build
-
Timur Safin authored
Previous version of tzcode/CMakeLists.txt leaves untracked files under source directory src/lib/tzcode/tz/. We have changed slightly an approach used to checkout and build IANA github sources under build/ directory, not in ${PROJECT_BINARY_DIR} (which may be pointing not to out-of-source build directory, but rather to the repository root itself, if insource build used). Closes #7173 NO_CHANGELOG=infra NO_DOC=infra NO_TEST=infra
-
- May 22, 2022
-
-
Aleksandr Lyapunov authored
By a mistake it was marked as API_EXPORT but was forgotten to be added to exports. Closes #7125 NO_DOC=bugfix
-
- May 20, 2022
-
-
Nikita Pettik authored
This client error assumes two arguments: space's name and index's name. Since from the context it's clear that primary index is affected, let's drop index name from error message. It's quite handy for space upgrade case, since in such situation we have lack of information concerning space. NO_CHANGELOG=<Minor change> NO_DOC=<No functional changes>
-
Nikita Pettik authored
We are going to utilize primary key definition during space upgrade in order to verify primary key invariant. So we need it to be stored in space_upgrade metadata. Let's extend space_upgrade_new() signature and pass there primary key definition. Also patch moves space_upgrade_new() call a bit lower through code - now it's called after all indexes are assigned (to simplify extraction of primary key definition). Moreover, in order to print pretty error message during space upgrade we should keep space in struct space_upgrade. NO_DOC=ee NO_TEST=ee NO_CHANGELOG=ee
-
Nikita Pettik authored
box.error() expects first argument to be numeric or table; passing string to it is wrong. Accidentally in net.box module two places where string is passed to box.error() as first argument: in :unprepare() and :connect() methods. Let's fix them and pass error code ER_ILLEGAL_PARAMS. NO_DOC=<bugfix> NO_CHANGELOG=<Minor>
-
Kseniia Antonova authored
Fix wording, punctuation, and formatting. NO_DOC=changelog NO_TEST=changelog
-
Denis Smirnov authored
Previously SQL didn't validate for all cases, that the amount of the source and destination columns during insertion is equal. The problem was detected when we insert an incorrect amount of values into the table. For example, the query insert into t(a) select a, b from t produced an instance crash. Fixed. Closes #7132 NO_DOC=bug fix Co-authored-by:
Mergen Imeev <imeevma@gmail.com>
-
Timur Safin authored
We used to not implement comparison operators for interval objects, thus any compare (even of equal) objects returned false: ``` tarantool> dt1 = datetime.new() --- ... tarantool> dt2 = datetime.now() --- ... tarantool> dt1 - dt1 == dt2 - dt2 --- - false ... ``` Now we implemented comparison for interval objects, where we compare field by field starting from highest attribute (e.g. `year`) to smallest attribute (e.g. `nsec`) and if any of comparison returned non zero value then we return this result. NO_DOC=bugfix NO_CHANGELOG=bugfix
-
Timur Safin authored
Use Olson/IANA tzdata for timezone handling in datetime string. Closes of #6751 NO_TEST=doc @TarantoolBot document Title: Document timezone support Timezones support ----------------- Tarantool uses IANA tzdata aka Olson DB facilities for timezone resolution at the moment of parsing of datetime literals or while parsing `tz` attribute in constructor, or `:set{}` method call. In addition to the `tzoffset` we provided before, we now define `tzindex`, the unique index assigned by Tarantool to each known IANA timezone. ```lua date = require 'datetime' tarantool> T = date.parse '2022-01-01T00:00 Europe/Moscow' tarantool> T.tzindex --- - 947 ... tarantool> T.tzoffset --- - 180 ... tarantool> T.tz --- - Europe/Moscow ... ``` Now `date.isdst` field (alone and as part of `:totable()` table) is correctly calculated using `tzindex` and attributes of the selected timezone in the Olson DB timezone. ``` tarantool> date.parse('2004-06-01T00:00 Europe/Moscow').isdst --- - true ... tarantool> date.parse('2004-12-01T00:00 Europe/Moscow'):totable() --- - sec: 0 min: 0 yday: 336 day: 1 nsec: 0 isdst: false wday: 4 tzoffset: 180 month: 12 year: 2004 hour: 0 ... ``` All timezone names and abbreviations, known to the current Tarantool version are available via `datetime.TZ` bidirectional array. ```lua print(date.TZ['Europe/Moscow']) -- 947 print(date.TZ[947]) -- Europe/Moscow ``` Limitations ----------- There were moments in past history, when local mean time in some partcular zone used timezone offset not representable in whole minutes, but rather in seconds, i.e. in Moscow before 1918 there used to be offset +2 hours 31 minutes and 19 seconds. Please see Olson dump for this period ``` $ ./src/lib/tzcode/install/usr/bin/zdump -c1880,1918 -i Europe/Moscow TZ="Europe/Moscow" - - +023017 MMT 1916-07-03 00:01:02 +023119 MMT 1917-07-02 00 +033119 MST 1 1917-12-27 23 +023119 MMT ``` Modern tzdata rules do not use such tiny fraction, and all timezones differ to UTC in units measured in minutes, not seconds. Tarantool datetime uses minutes internally as units for `tzoffset` so there is some loss of precision if you try to operate with such ancient timestamps.
-
Timur Safin authored
For performance reasons try to reuse previously allocated structure across calls to tzalloc() if zone appears to be the same. NO_DOC=refactoring NO_CHANGELOG=refactoring NO_TEST=refactoring
-
Timur Safin authored
Fixed incorrect interval initialization for case of `()` used while it was correct for `{}` arguments. NO_DOC=bugfix NO_CHANGELOG=bugfix NO_TEST=bugfix ``` tarantool> itv = require('datetime').interval.new{} --- ... tarantool> itv --- - 0 seconds ... tarantool> itv = require('datetime').interval.new() --- ... tarantool> itv --- - +0.000000001 seconds ... ```
-
Timur Safin authored
Extended gen-zone-abbrevs.pl script with capability to generate timezones.lua in addition to timezones.h. That's bidirectional Lua translation table for resolution of timezone name by it's index and vice versa. Exported to Lua world via `datetime.TZ` NO_DOC=next commit
-
Timur Safin authored
Properly calculate `isdst` field in datetime Lua object and for attribute returned by `:totable()` function. NO_DOC=next commit
-
Timur Safin authored
* Modified localtime.c to use tnt_tm instead of tm structure; * Use this structure for passing data to tnt_localtime_rz at the moment of time-zone resolution; * As a side-effect of refactoring - simplified singleton we used to use for automagical sorting of array with timezone abbreviations NO_DOC=internal NO_CHANGELOG=internal
-
Timur Safin authored
Using our own `tnt_tm` allows to properly pass `tm_tzindex`. NO_DOC=refactoring NO_CHANGELOG=refactoring NO_TEST=refactoring
-
Timur Safin authored
* localtime.c refactored to make tzalloc/tzfree public; * Modified Perl script to generate primary Olson timezones and aliases. Get rid of NYI; NO_DOC=refactoring NO_CHANGELOG=refactoring NO_TEST=refactoring
-
Timur Safin authored
- localtime.c, tzfile.h added to build NO_DOC=build NO_CHANGELOG=build NO_TEST=build
-
Vladimir Davydov authored
A certificate used for an encrypted replication connection may expire, in which case the user will be forced to reconfigure the connection both on the master and on the replica to use the new certificate. If the replica completes the reconfiguration first, it will fail to connect to the master and never retry, even though the master should complete its reconfiguration in a moment. To avoid that, we should make the applier retry to connect on SSLError, just like it does on SocketError. Needed for https://github.com/tarantool/tarantool-ee/issues/107 NO_DOC=ee NO_TEST=ee NO_CHANGELOG=ee
-