Skip to content
Snippets Groups Projects
  1. Nov 30, 2023
    • Serge Petrenko's avatar
      replication: fix extraneous split-brain alerting · ffa6ac15
      Serge Petrenko authored
      Current split-brain detector implementation raises an error each time a
      CONFIRM or ROLLBACK entry is received from the previous synchronous
      transaction queue owner. It is assumed that the new queue owner must
      have witnessed all the previous CONFIRMS. Besides, according to Raft,
      ROLLBACK should never happen.
      
      Actually there is a case when a CONFIRM from an old term is legal: it's
      possible that during leader transition old leader writes a CONFIRM for
      the same transaction that is confirmed by the new leader's PROMOTE. If
      PROMOTE and CONFIRM lsns match there is nothing bad about such
      situation.
      
      Symmetrically, when an old leader issues a ROLLBACK with the lsn right
      after the new leader's PROMOTE lsn, it is not a split-brain.
      
      Allow such cases by tracking the last confirmed lsn for each synchronous
      transaction queue owner and silently nopifying CONFIRMs with an lsn less
      than the one recorded and ROLLBACKs with lsn greater than that.
      
      Closes #9138
      
      NO_DOC=bugfix
      ffa6ac15
    • Serge Petrenko's avatar
      replication: persist confirmed vclock on replicas · c4415d44
      Serge Petrenko authored
      Previously the replicas only persisted the confirmed lsn of the current
      synchronous transaction queue owner. As soon as the onwer changed, the
      info about which lsn was confirmed by the previous owner was lost.
      
      Actually, this info is needed to correctly filter synchro requests
      coming from the old term, so start tracking confirmed vclock instead of
      the confirmed lsn on replicas.
      
      In-scope of #9138
      
      NO_TEST=covered by the next commit
      NO_CHANGELOG=internal change
      
      @TarantoolBot document
      Title: Document new IPROTO_RAFT_PROMOTE request field
      
      IPROTO_RAFT_PROMOTE and IPROTO_RAFT_DEMOTE requests receive a new key
      value pair:
      
      IPROTO_VCLOCK : MP_MAP
      
      The vclock holds a confirmed vclock of the node sending the request.
      c4415d44
    • Serge Petrenko's avatar
      xrow: remove SYNCHRO_BODY_LEN_MAX constant · 53605779
      Serge Petrenko authored
      Synchronous requests will receive a new field encoding a full vclock
      soon. Theoretically a vclock may take up to ~ 300-400 bytes (3 bytes for
      a map header + 32 components each taking up 1 byte for replica id and up
      to 9 bytes for lsn). So it makes no sense to increase
      SYNCHRO_BODY_LEN_MAX from 32 to 400-500. It would become almost the same
      as plain BODY_LEN_MAX. Simply reuse the latter everywhere.
      
      In-scope-of #9138
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      53605779
    • Serge Petrenko's avatar
      xrow: fix xrow_decode_synchro rejecting non-int types · c18410f5
      Serge Petrenko authored
      There was an error in xrow_decode_synchro: it compared the expected type
      of the value to the type of the key (MP_UINT) instead of the type of the
      actual value. This went unnoticed because all values in synchro requests
      were integers.
      
      This is going to change soon, when PROMOTE requests will start holding a
      vclock, so fix the wrong type check.
      
      In-scope-of #9138
      
      NO_DOC=bugfix
      NO_CHANGELOG=not user-visible
      c18410f5
    • Sergey Kaplun's avatar
      lua: prevent serialization of error for ucdata · 98474f70
      Sergey Kaplun authored
      Without checking the return value of lua_pcall()` in
      `lua_field_inspect_ucdata()`, the error message itself is returned as a
      serialized result. The result status of `lua_pcall()` is not ignored
      now.
      
      NO_DOC=bugfix
      
      Closes #9396
      98474f70
    • Nikolay Shirokovskiy's avatar
      test: fix flaky gh_6819_iproto_watch_not_implemented_test · 6a6ee412
      Nikolay Shirokovskiy authored
      Netbox internally watches 'box.shutdown' for the sake of graceful
      shutdown. The event subscription is async with connection API.
      Additionally we check error count on server using different connection.
      As a result we may or may not account error for the netbox internal
      watch failure.
      
      Let's account the internal watch failure reliably. Also while we at it
      let's get rid of races for error count check.
      
      Close #9423
      
      NO_CHANGELOG=internal
      NO_DOC=internal
      6a6ee412
    • Alexander Turenko's avatar
      config: verify config.etcd.prefix presence · 6b168add
      Alexander Turenko authored
      If `config.etcd` is present and non-empty, `config.etcd.prefix` is
      required.
      
      This validation check was not performed due to a mistake in a schema
      node wrapper that adds a validator that checks an attempt to use an
      Enterprise Edition option on Community Edition.
      
      Part of #8862
      
      NO_DOC=bugfix
      6b168add
  2. Nov 29, 2023
    • Nikolay Shirokovskiy's avatar
      vinyl: fix memory leak in vy_task_write_run · e985e722
      Nikolay Shirokovskiy authored
      Looks like this is typo introduced in the commit 0704ebb7 ("xlog:
      rework writer API").
      
      Close #9428
      
      NO_TEST=will be tested when fiber_cxx_invoke suppression will be removed
      NO_CHANGELOG=introduced in 3.0.0-alpha3
      NO_DOC=bugfix
      e985e722
    • Serge Petrenko's avatar
      replication: send anonymous replica version id · 58c006c9
      Serge Petrenko authored
      Starting with commit f1c2127d ("replication: add META stage to JOIN")
      replication master appends a special section, called IPROTO_JOIN_META to
      the initial snapshot sent to the replica. This section contains the
      latest raft term and synchronous transaction queue owner and term.
      
      The section is only sent to nodes, which have a non-zero version_id.
      For some reason, version_id encoding for FETCH_SNAPSHOT (analog of JOIN
      for anonymous replicas) wasn't added in that commit, so anonymous
      replicas do not receive synchronous queue state.
      
      This leads to them raising ER_SPLIT_BRAIN errors later after join, when
      the first synchronous row arrives.
      
      In order to fix this, start encoding version_id in FETCH_SNAPSHOT
      requests.
      
      Closes #9401
      
      @TarantoolBot document
      Title: new field in `IPROTO_FETCH_SNAPSHOT` request
      
      `IPROTO_FETCH_SNAPSHOT` request was bodyless (only contained a header)
      until now, but now it receives a body with a single field:
      `IPROTO_SERVER_VERSION` : MP_UINT -- an encoded representation of the
      server version of a replica issuing the request.
      58c006c9
    • Yan Shtunder's avatar
      box: add is_sync option · c3c0d439
      Yan Shtunder authored
      Added a new is_sync parameter to `box.begin()`, `box.commit()`, and
      `box.atomic()`. To make the transaction synchronous, set the `is_sync`
      option to `true`. If any value other than `true/nil` is set, for example
      `is_sync = "some string"`, then an error will be thrown.
      
      Example:
      
      ```Lua
      -- Sync transactions
      box.atomic({is_sync = true}, function() ... end)
      
      box.begin({is_sync = true}) ... box.commit({is_sync = true})
      
      box.begin({is_sync = true}) ... box.commit()
      
      box.begin() ... box.commit({is_sync = true})
      
      -- Async transactions
      box.atomic(function() ... end)
      
      box.begin() ... box.commit()
      ```
      
      Closes #8650
      
      @TarantoolBot document
      Title: box.atomic({is_sync = true})
      
      Added the new `is_sync` parameter to `box.atomic()`. To make the
      transaction synchronous, set the `is_sync` option to `true`. Setting
      `is_sync = false` is prohibited. If to set any value other than true
      for example `is_sync = "some string"`, then an error will be thrown.
      c3c0d439
    • Mergen Imeev's avatar
      config: add dependencies for roles · 7fbc1d04
      Mergen Imeev authored
      This patch adds dependencies support for roles.
      
      Part of #9078
      
      @TarantoolBot document
      Title: dependencies for roles
      
      Roles can now have dependencies. This means that the verify() and
      apply() methods will be executed for these roles, taking into account
      the dependencies. Dependencies should be written in the "dependencies"
      field of the array type. Note, the roles will be loaded (not applied!)
      in the same order in which they were specified, i.e. not taking
      dependencies into account.
      
      Example:
      
      Dependencies of role A: B, C
      Dependencies of role B: D
      No other role has dependencies.
      
      Order in which roles were given: [E, C, A, B, D, G]
      They will be loaded in the same order: [E, C, A, B, D, G]
      The order, in which functions verify() and apply() will be executed:
      [E, C, D, B, A, G].
      7fbc1d04
    • Vladimir Davydov's avatar
      journal: broadcast box.wal_error event on write error · ddf25203
      Vladimir Davydov authored
      Closes #9405
      
      @TarantoolBot document
      Title: Document then new built-in system event `box.wal_error`
      
      The new event is broadcast whenever Tarantool fails to commit
      a transaction to the write-ahead log (WAL), which usually means
      there's a problem with the underlying disk storage. The new event's
      payload is a table that currently contains the only field `count` that
      stores the number of WAL errors happened so far or nil if there hasn't
      been any WAL errors.
      ddf25203
  3. Nov 28, 2023
    • Nikolay Shirokovskiy's avatar
      test: do not produce coredumps in tests · 72867b84
      Nikolay Shirokovskiy authored
      Test suite run can produce coredumps in case of bugs. Unfortunately
      coredumps related to bugs are mixed with coredumps produced related to
      special test conditions, like when we test Tarantool response to deadly
      signal. Avoid producing coredumps in correct test suite run.
      
      NO_CHANGELOG=internal
      NO_DOC=internal
      72867b84
    • Vladimir Davydov's avatar
      net.box: allow calling stored Lua and C module functions with self.call · e92a8e7b
      Vladimir Davydov authored
      The fix is simple: look up the function in `box.func` by name and, if
      found, execute its `call` method. The only tricky part is to avoid the
      lookup before `box.cfg` is called because `box.func` is unavailable at
      the time. We achieve that by checking `box.ctl.is_recovery_finished`.
      
      Closes #9131
      
      NO_DOC=bug fix
      e92a8e7b
    • Nikolay Shirokovskiy's avatar
      fiber: fix use-after-free on shutdown with lingering fiber join · 2f7ec948
      Nikolay Shirokovskiy authored
      On Tarantool shutdown we destroy all the fibers in some sequence. We
      don't require that all the fibers are finished before shutdown. So it
      may turn out that we first destroy some alive fiber and then destroy
      another alive fiber which joins the first one. Currently we have
      use-after-free issue in this case because clearing `link` field of
      the second fiber changes `wake` field of the first fiber.
      
      Close #9406
      
      NO_DOC=bugfix
      2f7ec948
    • Nikolay Shirokovskiy's avatar
      main: don't break graceful shutdown on init script exit · 786eb2ac
      Nikolay Shirokovskiy authored
      Graceful shutdown is done in a special fiber which is started for
      example on SIGTERM. So it can run concurrently with fiber executing
      Tarantool init script. On init fiber exit we break event loop to pass
      control back to the Tarantool initialization code. But we fail to run
      event loop a bit more to finish graceful shutdown.
      
      The test is a bit contrived. A more real world case is when Tarantool is
      termintated during lingering box.cfg().
      
      Close #9411
      
      NO_DOC=bugfix
      786eb2ac
  4. Nov 27, 2023
    • Alexander Turenko's avatar
      main: add link to tt docs into the --help message · c92500ac
      Alexander Turenko authored
      It was suggested by Igor Munkin (@igormunkin) in PR #9288.
      
      Part of #8862
      Follows up PR #9288
      
      NO_DOC=the help message is not an API, nothing to document
      NO_CHANGELOG=see NO_DOC
      NO_TEST=see NO_DOC
      c92500ac
    • Mergen Imeev's avatar
      sql: remove one row limit in EXISTS subquery · a5e498d1
      Mergen Imeev authored
      According to ANSI, EXISTS is a predicate that tests a given subquery and
      returns true if it returns more than 0 rows, false otherwise. However,
      after 2a720d11, EXISTS worked correctly only if there were exactly 0
      or 1 rows, and in all other cases it gave an error. This patch makes
      EXITS work properly.
      
      Closes #8676
      
      NO_DOC=bugfix
      a5e498d1
    • Magomed Kostoev's avatar
      box: revert the lua space object on the space drop rollback · 41114555
      Magomed Kostoev authored
      Before this commit the space rollback had been treated as a new space
      creation, so it caused creation of a new space object in the Lua's
      box.space namespace. Since the preceding space drop removed the space
      object from the namespace, on the space rollback all the Lua users of
      the space loosed the track of its changes: the original space object
      is never updated anymore.
      
      This is fixed by detecting the space rollback and restoring the old
      space object instead of creating a new one.
      
      Closes #9120
      
      NO_DOC=bugfix
      41114555
    • Mergen Imeev's avatar
      sql: fix assertion in case FK or CK declared first · 11ff06b1
      Mergen Imeev authored
      This patch fixes an assertion or segmentation error if a FOREIGN KEY or
      CHECK constraint is declared before the first column.
      
      Closes #8392
      
      NO_DOC=bugfix
      11ff06b1
  5. Nov 23, 2023
    • Sergey Vorontsov's avatar
      ci: use GitHub-hosted runner to upload sources · 3ee68d8b
      Sergey Vorontsov authored
      In the `.github/workflows/source.yml` workflow for preparing a tarball
      with the source code, a PackPack Docker container is already used. For
      uploading the tarball to the repo, the `aws` utility is used, which is
      installed before. To skip installation of additional packages on the
      self-hosted runners, we are moving to the GitHub-hosted runners, which
      already have the `aws` utility installed. Step `Prepare checkout` is
      removed because the GitHub-hosted runner is an ephemeral environment.
      
      NO_DOC=ci
      NO_TEST=ci
      NO_CHANGELOG=ci
      3ee68d8b
    • Sergey Vorontsov's avatar
      ci: remove using Docker container in source.yml · 09ad57f4
      Sergey Vorontsov authored
      In this commit, we're fixing a problem with Docker in the workflow
      `.github/workflows/source.yml`.
      
      The mentioned workflow uses the `.github/actions/environment` action
      that needs a permission to make a loopback device for [1]. We didn't
      allow for that before due to missing container args, and it caused the
      following error:
      
      ```
      umount: /tmp/luajit-test-vardir: must be superuser to unmount.
      256000+0 records in
      256000+0 records out
      1048576000 bytes (1.0 GB, 1000 MiB) copied, 1.36702 s, 767 MB/s
      mount: /tmp/luajit-test-vardir: mount failed: Operation not permitted.
      Error: Process completed with exit code 1.
      ```
      
      The problem started since commit af996bbb ("ci: dockerize
      linux workflows"). The simplest way to fix the issue is not to run
      the workflow inside a Docker container because a tarball with the
      source code is created via the `./packpack/packpack tarball` command
      that runs a Docker container as well.
      
      [1] https://github.com/tarantool/tarantool/issues/7472
      
      NO_DOC=ci
      NO_TEST=ci
      NO_CHANGELOG=ci
      09ad57f4
    • Mergen Imeev's avatar
      sql: remove field sql_default_value · 1f128c51
      Mergen Imeev authored
      This patch removes the sql_default_value field from the struct field_def
      and the sql_default_value_expr field from the struct tuple_field as they
      are no longer needed.
      
      Follow-up #8793
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      1f128c51
  6. Nov 22, 2023
    • Sergey Bronnikov's avatar
      cmake: introduce target checkpatch · 2e31751d
      Sergey Bronnikov authored
      The patch introduces a new CMake target "checkpatch", that checks
      patches on top of the master branch using script checkpatch.pl [1]. By
      default CMake looking for `checkpatch.pl` in a directory "checkpatch" in
      Tarantool's repository root directory and in a directories specified in
      PATH. By default commit revisions range checked by checkpatch is
      `origin/master..HEAD`, `origin/master` could be overridden with
      environment variable `CHECKPATCH_GIT_REF`.
      
      1. https://github.com/tarantool/checkpatch
      
      NO_CHANGELOG=build
      NO_DOC=build
      NO_TEST=build
      2e31751d
    • Vladimir Davydov's avatar
      cmake: add libsvace to static dependency list · a6a8ef68
      Vladimir Davydov authored
      We run SVACE on static build. It doesn't compile unless libsvace is in
      the allow list.
      
      Follow-up #9242
      
      NO_DOC=build
      NO_TEST=build
      NO_CHANGELOG=build
      a6a8ef68
    • Vladimir Davydov's avatar
      cmake: use legacy layout for static-build bundled libs · 37b1c287
      Vladimir Davydov authored
      SVACE stopped working after commit 98b38e89 ("cmake: allow to
      bundle static dependencies in main project") changed the bundled libs
      directory layout. To fix this, let's introduce the new cmake option
      BUNDLED_LIBS_INSTALL_DIR and set it in static-build/CMakeLists.txt to
      the legacy location. Also, let's use the legacy directories for each
      external project's PREFIX, SOURCE_DIR, BINARY_DIR, and STAMP_DIR.
      
      Follow-up #9242
      
      NO_DOC=build
      NO_TEST=build
      NO_CHANGELOG=build
      37b1c287
  7. Nov 21, 2023
    • Igor Munkin's avatar
      luajit: bump new version · e844cd09
      Igor Munkin authored
      * Mark CONV as non-weak, to prevent elimination of its side-effect.
      * Fix ABC FOLD rule with constants.
      * test: add test for conversions folding
      * Add NaN check to IR_NEWREF.
      * test: fix flaky OOM error frame test
      * LJ_GC64: Fix lua_concat().
      * test: introduce asserts assert_str{_not}_equal
      * ci: enable codespell
      * cmake: introduce target with codespell
      * codehealth: fix typos
      * tools: add cli flag to run profile dump parsers
      * profilers: purge generation mechanism
      * memprof: refactor symbol resolution
      * sysprof: fix crash during FFUNC stream
      * Fix last commit.
      * Print errors from __gc finalizers instead of rethrowing them.
      * x86/x64: Fix math.ceil(-0.9) result sign.
      * test: fix flaky fix-jit-dump-ir-conv.test.lua
      * IR_MIN/IR_MAX is non-commutative due to underlying FPU ops.
      * Fix jit.dump() output for IR_CONV.
      * Fix FOLD rule for x-0.
      * FFI: Fix pragma push stack limit check and throw on overflow.
      * Prevent compile of __concat with tailcall to fast function.
      * Fix base register coalescing in side trace.
      * Fix register mask for stack check in head of side trace.
      * x64: Properly fix __call metamethod return dispatch.
      
      Closes #8594
      Closes #8767
      Closes #9339
      Part of #9145
      
      NO_DOC=LuaJIT submodule bump
      NO_TEST=LuaJIT submodule bump
      e844cd09
    • Ilya Verbin's avatar
      txn: run on_rollback triggers on rollback to savepoint · 727912ce
      Ilya Verbin authored
      Currently, if a statement is rolled back during rollback to a savepoint, it
      does not appear in neither on_commit nor on_rollback triggers. Fix this by
      running on_rollback triggers during the rollback to the savepoint.
      
      Closes #7810
      
      NO_DOC=bugfix
      727912ce
    • Ilya Verbin's avatar
      txn: fix on_rollback trigger args for txns aborted by yield/timeout · 8eb153b7
      Ilya Verbin authored
      Currently, if a transaction is aborted by a fiber yield or by a timeout,
      txn_rollback_to_svp() is called to rollback all statements of the txn.
      After that the transaction is completely aborted on attempt to commit it.
      If an on_rollback trigger is set, it is called from txn_complete_fail(),
      however it receives an empty iterator, because at this point the statements
      are already destroyed. This patch invokes on_rollback triggers directly
      from txn_rollback_to_svp() for abort-by-yield, and postpones the rollback
      for abort-by-timeout.
      
      Closes #9340
      
      NO_DOC=bugfix
      8eb153b7
    • Ilya Verbin's avatar
      txn: pass txn_stmt instead of txn to on_commit/on_rollback · a1d85827
      Ilya Verbin authored
      Currently on_rollback triggers are called on rollback of the whole
      transaction. To make it possible to invoke them on rollback to a
      savepoint, we need to pass a statement at which the savepoint was
      created.
      
      Needed for #9340
      
      NO_DOC=refactoring
      NO_TEST=refactroring
      NO_CHANGELOG=refactoring
      a1d85827
    • Vladimir Davydov's avatar
      box: allow to grant lua_call privilege to function name · 773e3e9f
      Vladimir Davydov authored
      Now, one can specify a function name when configuring the lua_call
      privilege to a user or role. If omitted, the privilege will grant
      access to any global Lua function except for built-ins and stored
      procedures. If specified, the privilege will be applied only to
      the given function name, which may be a built-in, but still not
      a stored procedure. The function doesn't need to be defined at the
      time the privilege is granted.
      
      Since global Lua functions aren't stored in the database and hence
      have no numeric ids, we store string names in the _priv system table.
      Fortunately, it's already allowed for entity access so we don't need
      to update the system schema. The cached runtime access information
      is stored in a global hash table. Entries in the hash table are created
      on demand and removed if they store no grants.
      
      Closes #9360
      
      NO_DOC=updated doc ticket manually
      773e3e9f
  8. Nov 20, 2023
  9. Nov 17, 2023
    • Sergey Ostanevich's avatar
      test: fixup the 1mops perf test · 2c422a0b
      Sergey Ostanevich authored
      The option --sync was ignored due to a misprint.
      The temporary dir was never removed, overflowing the /tmp by default.
      
      NO_TEST=test update
      NO_DOC=test update
      NO_CHANGELOG=test update
      2c422a0b
  10. Nov 16, 2023
    • Maksim Kokryashkin's avatar
      test: remove finalizers table overflow test · e99f6cb0
      Maksim Kokryashkin authored
      This test is no longer needed in the Tarantool test suite
      since it was added to LuaJIT's test suite along with the fix
      for the issue mentioned in #3060 in scope of #8825 in commit
      tarantool/luajit@7b98314e0dacc7313c061aceeb0a32afd4e8cbce.
      
      Closes #3060
      Related to #8825
      
      NO_DOC=Cleanup
      NO_TEST=Already included in LuaJIT bump
      NO_CHANGELOG=Already included in LuaJIT bump
      e99f6cb0
  11. Nov 14, 2023
    • Vladimir Davydov's avatar
      box: allow lua_call priv owners to call registered Lua functions · 4b88d5fd
      Vladimir Davydov authored
      Currently, the lua_call privilege simply doesn't work for registered
      functions. This patch fixes this issue: now, it grants access to any
      registered function that is written in Lua unless it's a built-in
      function, such as dostring, or a persistent function.
      
      Note, this patch renames access_check_call to access_check_lua_call to
      avoid confusion because this function is now global. It also renames
      access_check_eval to access_check_lua_eval for consistency.
      
      Closes #9363
      
      NO_DOC=updated doc ticket manually
      NO_CHANGELOG=feature has not been released yet
      4b88d5fd
    • Magomed Kostoev's avatar
      fiber: make the concurrent fiber_join safer · 44401529
      Magomed Kostoev authored
      Prior to this patch a bunch of illegal conditions was possible:
      1. The joinability of a fiber could be changed while the fiber is
         being joined by someone. This could lead to double recycling:
         the first one happened on the fiber finish, and the second one
         in the fiber join.
      2. The joinability of a dead joinable fiber could be altered, this
         led to inability jo join the dead fiber and free its resources.
      3. A running fiber could be joined concurrently by two or more
         fibers, so the fiber could be recycled more than once (once
         per each concurrent join).
      4. A dead recycled fiber could be made joinable and joined leading
         to the double recycle.
      
      Fixed these issues by adding a new FIBER_JOIN_BEEN_INVOKED flag: now
      the `fiber_set_joinable` and `fiber_join_timeout` functions detect
      the double join. Because of the API limitations both of them panic
      when an invalid condition is met:
      - The `fiber_set_joinable` was not designed to report errors.
      - The `fiber_join_timeout` can't raise any error unless a timeout
        is met, because the `fiber_join` users don't expect to receive
        any error from this function at all (except the one generated
        by the joined fiber).
      
      It's still possible that a fiber join is performed on a struct which
      has been recycled and, if the new fiber is joinable too, this can't
      be detected. The current fiber API does not allow to fix this, so
      this is to be the user's responsibility, they should be warned about
      the fact the double join to the same fiber is illegal.
      
      Closes #7562
      
      @TarantoolBot document
      Title: `fiber_join`, `fiber_join_timeout` and `fiber_set_joinable`
      behave differently now.
      
      `fiber_join` and `fiber_join_timeout` now panic in case if double
      join of the given fiber is detected.
      
      `fiber_set_joinable` now panics if the given fiber is dead or is
      joined already. This prevents some amount of error conditions that
      could happen when using the API in an unexpected way, including:
      - Making a dead joinable fiber non-joinable could lead to a memory
        leak: one can't join the fiber anymore.
      - Making a dead joinable fiber joinable again is a sign of attempt
        to join the fiber later. That means the fiber struct may be joined
        later, when it's been recycled and reused. This could lead to a
        very hard to debug double join.
      - Making an alive joined fiber non-joinable would lead to the double
        free: once on the fiber function finish, and secondly in the active
        fiber join finish. Risks of making it joinable are described above.
      - Making a dead and recycled fiber joinable allowed to join the fiber
        once again leading to a double free.
      
      Any given by the API `struct fiber` should only be joined once. If a
      fiber is joined after the first join on it has finished the behavior
      is undefined: it can either be a panic or an incidental join to a
      totally foreign fiber.
      44401529
    • Vladimir Davydov's avatar
      box: add check against setting box.cfg options to inf and nan · 8ab8d656
      Vladimir Davydov authored
      Setting a box.cfg option to inf or nan can result in a crash or invalid
      behavior. For example, setting `box.cfg.checkpoint_interval` to 0/0
      triggers an assertion failure. Let's add a check against inf and nan for
      all options. These special numbers don't make any sense as configuration
      option values anyway.
      
      Closes #4962
      
      NO_DOC=bug fix
      8ab8d656
  12. Nov 13, 2023
    • Mergen Imeev's avatar
      sql: remove field stat from struct index_opts · 8410e68e
      Mergen Imeev authored
      Since our SQL statistics are disabled, this field is no longer required.
      
      Closes #9343
      
      NO_DOC=refactoring
      NO_TEST=refactroring
      NO_CHANGELOG=refactoring
      8410e68e
    • Mergen Imeev's avatar
      sql: remove use of index->opts.stat · 67c30334
      Mergen Imeev authored
      There is only one place where the field is filled with other then 0.
      Still, there is only two possible options, one of them is 0, the other
      is default value. Let's use them without filling the field.
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      67c30334
  13. Nov 10, 2023
    • Magomed Kostoev's avatar
      cmake: include config-specific and LTO flags into TARANTOOL_C_FLAGS · 6d99efe6
      Magomed Kostoev authored
      Prior to this patch only the flags given by the CMAKE_C_FLAGS were
      shown in the tarantool -v and Lua's tarantool.build.flags. Make
      it also show the flags from CMAKE_C_FLAGS_<CONFIG> and CFLAGS_LTO
      variables. The first one is config-specific set of flags (different
      for Debug, Release, RelWithDebInfo and MinSizeRel configs), the
      former is set in the cmake/lto.cmake if LTO is enabled.
      
      Closes #8022
      
      NO_DOC=build
      6d99efe6
Loading