Skip to content
Snippets Groups Projects
  1. Jun 27, 2023
    • Andrey Saranchin's avatar
      core/lua: introduce func_adapter for Lua · 52bc0407
      Andrey Saranchin authored
      We are going to introduce universal triggers registry and use it for
      tarantool triggers (e.g. space.on_replace). However, when trigger is set
      to the registry, we do not know which arguments will be passed there
      from C. That is why current implementation of triggers in tarantool is not
      suitable for use in universal registry.
      
      We decided to introduce func_adapter interface which allows to call
      functions from any programming language. Now we support only one
      language, which is Lua, so for the most part this interface is needed
      to invert dependencies.
      
      The patch introduces func_adapter interface and its implementation for
      Lua functions.
      
      Part of #8657
      
      NO_CHANGELOG=internal
      NO_DOC=internal
      52bc0407
  2. Jun 23, 2023
    • Georgiy Lebedev's avatar
      box: remove `cord_slab_cache` symbol from public API export · 970ea486
      Georgiy Lebedev authored
      `cord_slab_cache` was not designed to offer a backward compatible API, and
      leaving it exposed inevitably leads to errors like those highlighted in
      #7124 and tarantool/memcached#96: hence, remove it from the public API
      export.
      
      Closes #7124
      
      @TarantoolBot document
      Title: `cord_slab_cache` was removed from public API export
      
      The `cord_slab_cache` needs to be removed from the C API reference of the
      fiber module.
      970ea486
    • Georgiy Lebedev's avatar
      box: fix memory leaks on `ER_MULTISTATEMENT_TRANSACTION` in DDL · 6689f511
      Georgiy Lebedev authored
      Space index build and space format checking operations don't destroy space
      iterator on `txn_check_singlestatement` failure — fix this.
      
      Closes #8773
      
      NO_DOC=bugfix
      NO_TEST=<leak happens in small, cannot be detected by sanitizer>
      6689f511
    • Georgiy Lebedev's avatar
      core: use `malloc` instead of `region` allocator in procedure name cache · 7135910e
      Georgiy Lebedev authored
      The procedure name cache uses a region for hash table entry allocation, but
      the cache is a thread local variable, while the `region` uses a `slab`
      allocator the lifetime of which is bounded by `main`, while thread locals
      are destroyed after `main`: use the `malloc` allocator instead.
      
      Benchmark from #7207 shows that this change does not effect performance.
      
      Closes #8777
      
      NO_CHANGELOG=<leak does not affect users>
      NO_DOC=bugfix
      NO_TEST=<detected by ASAN>
      7135910e
    • Mergen Imeev's avatar
      sql: remove legacy code from vdbesort.c · d63a4bf2
      Mergen Imeev authored
      This patch removes some deprecated code. This code had no user-visible
      effect, but caused problems when running the test with ASAN enabled.
      
      Closes #8761
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      d63a4bf2
  3. Jun 22, 2023
    • Sergey Bronnikov's avatar
      test: testing tarantool in background mode · f676fb7c
      Sergey Bronnikov authored
      Before a commit ec1af129 ("box: do not close xlog file descriptors in
      the atfork handler") there was a bug when Tarantool with enabled
      background mode via environment variable could lead a crash:
      
      NO_WRAP
      ```
      $ TT_PID_FILE=tarantool.pid TT_LOG=tarantool.log TT_BACKGROUND=true TT_LISTEN=3301 tarantool -e 'box.cfg{}'
      $ tail -3 tarantool.log
      2021-11-02 16:05:43.672 [2341202] main init.c:696 E> LuajitError: cannot read stdin: Resource temporarily unavailable
      2021-11-02 16:05:43.672 [2341202] main F> fatal error, exiting the event loop
      2021-11-02 16:05:43.672 [2341202] main F> fatal error, exiting the event loop
      ```
      NO_WRAP
      
      With commit ec1af129 ("box: do not close xlog file descriptors in
      the atfork handler") described bug could not be reproduced.
      
      Proposed patch adds a test that starts Tarantool in background mode
      enabled via box.cfg option and via environment variable TT_BACKGROUND to
      make sure this behaviour will not be broken in a future.
      
      Closes #6128
      
      NO_DOC=test
      f676fb7c
    • Mergen Imeev's avatar
      config: add configuration examples · a2ad2709
      Mergen Imeev authored
      This patch adds configuration examples. Although the configuration
      module will be introduced later, the examples can already be tested
      using the instance_config and cluster_config modules.
      
      Closes #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      a2ad2709
    • Mergen Imeev's avatar
      config: introduce cluster_config module · 633410cc
      Mergen Imeev authored
      This patch introduces the cluster_config module. This module contains
      the cluster configuration schema.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      633410cc
    • Mergen Imeev's avatar
      config: introduce EE options · 250809ce
      Mergen Imeev authored
      This patch instroduces instance EE options.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      250809ce
    • Mergen Imeev's avatar
      config: app section for instance config · e91d3a88
      Mergen Imeev authored
      This section describes the instance application configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      e91d3a88
    • Mergen Imeev's avatar
      config: credentials section for instance config · 39de27df
      Mergen Imeev authored
      This section describes the instance credentials configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      39de27df
    • Mergen Imeev's avatar
      config: replication section for instance config · 989afab3
      Mergen Imeev authored
      This section describes the instance replication configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      989afab3
    • Mergen Imeev's avatar
      config: snapshot section for instance config · c9f5a36f
      Mergen Imeev authored
      This section describes the instance snapshot configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      c9f5a36f
    • Mergen Imeev's avatar
      config: wal section for instance config · c6e9b673
      Mergen Imeev authored
      This section describes the instance WAL configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      c6e9b673
    • Mergen Imeev's avatar
      config: vinyl section for instance config · 00300baf
      Mergen Imeev authored
      This section describes the instance vinyl engine configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      00300baf
    • Mergen Imeev's avatar
      config: memtx section for instance config · be98e1ae
      Mergen Imeev authored
      This section describes the instance memtx engine configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      be98e1ae
    • Mergen Imeev's avatar
      config: sql section for instance config · e1de4164
      Mergen Imeev authored
      This section describes the instance SQL configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      e1de4164
    • Mergen Imeev's avatar
      config: database section for instance config · ba3194ab
      Mergen Imeev authored
      This section describes the instance database configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      ba3194ab
    • Mergen Imeev's avatar
      config: iproto section for instance config · 6dd77aad
      Mergen Imeev authored
      This section describes the instance iproto configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      6dd77aad
    • Mergen Imeev's avatar
      config: log section for instance config · 8ea35a34
      Mergen Imeev authored
      This section describes the instance log configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      8ea35a34
    • Mergen Imeev's avatar
      config: fiber section for instance config · ddb530c0
      Mergen Imeev authored
      This section describes the instance fiber configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      ddb530c0
    • Mergen Imeev's avatar
      config: console section for instance config · db80322b
      Mergen Imeev authored
      This section describes the instance console configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      db80322b
    • Mergen Imeev's avatar
      config: process section for instance config · 642ad8da
      Mergen Imeev authored
      This section describes the instance process configuration.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      642ad8da
    • Mergen Imeev's avatar
      config: config section for instance config · dac1dbc9
      Mergen Imeev authored
      This section describes general instance configuration options.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      dac1dbc9
    • Mergen Imeev's avatar
      config: introduce instance_config module · 363b1264
      Mergen Imeev authored
      This patch introduces the instance_config module. This module will
      contain the instance configuration schema.
      
      Part of #8778
      
      NO_DOC=will be added later
      NO_CHANGELOG=will be added later
      363b1264
    • Alexander Turenko's avatar
      test: exclude msgpack module from override cases · 5b446db2
      Alexander Turenko authored
      The msgpack module can't lack `msgpack.NULL`, because it leads to the
      'Please call box.cfg{} first' error at access to `box.NULL`.
      
      An upcoming patch regarding schemas for tarantool's new hierarchical
      configuration uses `box.NULL` during tarantool's initialization.
      
      The override feature is tested on a set of modules, which are easy to
      replace with an arbitrary table without losing an ability to pass
      tarantool's initialization. The msgpack module will not meet the
      criteria after the mentioned patch.
      
      The test doesn't attempt to hold a precise list of modules available for
      overriding. It rather checks the overall mechanics. So it is OK to
      adjust the list.
      
      NO_DOC=testing code change
      NO_CHANGELOG=see NO_DOC
      5b446db2
    • Ilya Verbin's avatar
      build: disable backtrace feature on AArch64 Linux · 418e749c
      Ilya Verbin authored
      There are sporadic segfaults in libunwind during backtrace_collect().
      Reproducible with the latest version, and there are open issues with
      similar stacks:
      
      https://github.com/libunwind/libunwind/issues/150
      https://github.com/libunwind/libunwind/issues/260
      https://github.com/libunwind/libunwind/issues/473
      
      Let's disable ENABLE_BACKTRACE for AArch64 Linux until these issues are
      resolved in libunwind.
      
      Closes #8572
      Part of #8791
      
      NO_DOC=bugfix
      418e749c
    • Ilya Verbin's avatar
      build: remove backtrace feature compiler dependency from rpm spec · f7c4a34a
      Ilya Verbin authored
      The ability to support backtraces is checked in cmake/compiler.cmake,
      it makes no sense to duplicate the check in rpm/tarantool.spec. Also do
      not enable backtraces unconditionally in apk/APKBUILD and static-build.
      
      Part of #6998
      
      NO_DOC=build
      NO_TEST=build
      NO_CHANGELOG=build
      f7c4a34a
    • Serge Petrenko's avatar
      test: rework 6794 test to generate broken data files · 0b75dcb4
      Serge Petrenko authored
      Instead of relying on fixed xlog / snap pair in gh_6794_data, let's
      better generate the desired files right in the test. This way we won't
      face the problem of the files getting out of date. For example, when
      schema version changes.
      
      Remove the now unneeded gh_6794_data files and re-enable the
      gh_6794_recover_nonmatching_xlogs test.
      
      Closes #8701
      
      NO_DOC=test
      NO_CHANGELOG=test
      0b75dcb4
    • Maksim Kokryashkin's avatar
      ci: fix lango stale PRs workflow · 98dc86c4
      Maksim Kokryashkin authored
      This patch fixes the crontab expression in the
      Lango team stale PRs workflow, so it runs not every minute,
      but every hour.
      
      Also, python version is updated to 3.11, since the script is
      reliant onto `datetime.fromisoformat' changes, that were
      introduced in that version.
      
      NO_DOC=Workflow fix
      NO_TEST=Workflow fix
      NO_CHANGELOG=Workflow fix
      98dc86c4
  4. Jun 21, 2023
    • Oleg Jukovec's avatar
      httpc: fix content-length with a stream · e2e5ef4b
      Oleg Jukovec authored
      The description of CURLOPT_UPLOAD [1] is confusing:
      
          If you use PUT to an HTTP 1.1 server, you can upload data without
          knowing the size before starting the transfer if you use chunked
          encoding. You enable this by adding a header like
          "Transfer-Encoding: chunked" with CURLOPT_HTTPHEADER.
      
      In fact, libcurl adds this header itself. Actually we need to avoid
      adding this header by libcurl with CURLOPT_INFILESIZE [2].
      
      The CURLOPT_UPLOAD documentation has been updated [3].
      
      1. https://github.com/curl/curl/blob/555bacd6d522bcca497573765056354f4d5d7b33/docs/libcurl/opts/CURLOPT_UPLOAD.3
      2. https://curl.se/libcurl/c/httpput.html
      3. https://github.com/curl/curl/pull/11300
      
      Closes #8744
      
      NO_DOC=bugfix
      e2e5ef4b
    • Aleksandr Lyapunov's avatar
      memtx: abort readers of rollbacked prepared · 54986902
      Aleksandr Lyapunov authored
      There's case when a transaction is rolled back from prepared
      state. This happens when WAL fails, synchronized replication
      confirmation failure or perhaps in other similar cases. By design
      other RW transactions and transactions with READ_COMMITTED
      isolation level are allowed to read prepared state. All these
      transactions must be aborted in case of rollback of prepared
      transaction since they definitely have read no more possible
      database state.
      
      This patch implements this abortion.
      
      Closed #8654
      
      NO_DOC=bugfix
      54986902
    • Aleksandr Lyapunov's avatar
      memtx: fix and refactor memtx_tx_history_rollback_stmt · 85569d9c
      Aleksandr Lyapunov authored
      Rollback is rather complicated part if MVCC implementation that
      is meant to handle two kinds of rollback:
      * rollback from in-progress state, if box.rollback() is called.
      * rollback from prepared state, when WAL fails.
      Unfortunately the last one was not properly tested and surely
      has at least one flaw. When an inserting transaction becomes
      prepared its stories could be linked as deleted (via del_stmt
      pointer) by other in-progress transactions in order to maintain
      correct visibility. The problem is that in case of rollback of
      such prepared transaction those links remained. Broken links
      breaks the chain structure, and some older changes (that were
      linked as deleted before that hapless preparation) can become
      visible to other transaction.
      
      Refactor, simplify a bit that part of code and fix the issue
      described above; cover with tests.
      
      Closes #8648
      
      NO_DOC=bugfix
      85569d9c
    • Aleksandr Lyapunov's avatar
      memtx: simplify and refactor memtx_tx_history_prepare_stmt · e9015074
      Aleksandr Lyapunov authored
      Almost completely rewrite, simplify and comment this part of code.
      
      Part of #8648
      Part of #8654
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      e9015074
    • Aleksandr Lyapunov's avatar
      memtx: simplify and refactor memtx_tx_history_add_stmt · 63da3bed
      Aleksandr Lyapunov authored
      Almost completely rewrite, simplify and comment this part of code.
      
      Part of #8648
      Part of #8654
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      63da3bed
    • Aleksandr Lyapunov's avatar
      memtx: replace is_pure_insert flag with is_own_change flag · 3cfa6756
      Aleksandr Lyapunov authored
      The latter flag is a bit wider: it reveals not only inserting
      statements after deleting by the same transaction, but also
      replacing and deleting statements after all kinds of previois
      changes but the same transaction. This extended behavior will
      be used in further commits.
      
      Part of #8648
      Part of #8654
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      3cfa6756
    • Aleksandr Lyapunov's avatar
      memtx: remove does_require_old_tuple member · 74149734
      Aleksandr Lyapunov authored
      It was an ugly solution when MVCC engine requires outside engine
      to set this flag which is not convenient.
      
      Remove it and use mode arguments to set up proper read trackers.
      
      Part of #8648
      Part of #8654
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      74149734
    • Aleksandr Lyapunov's avatar
      memtx: remove dead code · 07067407
      Aleksandr Lyapunov authored
      The function memtx_tx_story_delete is expected to delete fully
      unlinked stories and thus should not try to unlink something by
      itself. So remove unlink and add asserts instead.
      
      Part of #8648
      Part of #8654
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      07067407
    • Aleksandr Lyapunov's avatar
      memtx: join and unify mvcc gap trackers · f8d97a2e
      Aleksandr Lyapunov authored
      Now there are three kinds of very close trackers:
      * The transaction have read some tuple that is not committed and
        thus not visible. This kind is now stored as gap_item with
        is_nearby = false.
      * The transaction made a select or range scan, reading a key or
        range between two adjacent tuples of the index. This kind is
        stored as gap_iteam with is_nearby = true.
      * A transaction completed a full scan of unordered index. This
        kind is stored as full_scan_item.
      
      All these trackers serve for the same thing: to record a fact
      that a transaction read something but didn't see anything.
      
      There are some problems with the current solution:
      * gap_item with is_nearby = false has several unused members that
        just consume space.
      * bool is_nearby flag for type descriptin is an ugly solution.
      * full_scan_item is separated from logically close items.
      
      This commit joins all these trackers under one base (that is
      struct gap_item_base) and solves problems above.
      
      Part of #8648
      Part of #8654
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      f8d97a2e
    • Aleksandr Lyapunov's avatar
      memtx: logically divide read tracking and gap tracking · 7b8b78be
      Aleksandr Lyapunov authored
      Now read trackers are used both for cases when a transaction has
      read an existing value and it has read nothing (read by key but
      there was no visible tuple in this place). For latter case an
      additional index_mask was used to identify from which index the
      read was done. Along with that there was per-index interval gap
      trackers.
      
      This patch divides area of responsibility between read trackers
      and gap tracker in the following way:
      * Reads of existing visible values are stored in read trackers.
      * Reads of non-existing or non-visible values are store in gap
        trackers.
      
      This new approach allows to provide new invariants: gap trackers
      are stored only at top of chain, and read trackers are stored
      only at topmost committed story in chain.
      
      Part of #8648
      Part of #8654
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      7b8b78be
Loading