Skip to content
Snippets Groups Projects
  1. Jan 18, 2024
    • Ilya Verbin's avatar
      Bump msgpuck submodule · f58bfc97
      Ilya Verbin authored
      This update pulls the following commit:
      
      * Introduce mp_read_int8 and mp_read_int16 functions
      
      Needed for tarantool/tarantool-ee#627
      
      NO_DOC=internal
      NO_CHANGELOG=internal
      NO_TEST=submodule update
      f58bfc97
    • Nikolay Shirokovskiy's avatar
      test: fix gh-2717-no-quit-sigint test · b4b9cc93
      Nikolay Shirokovskiy authored
      - First endswith returns boolean so fix where it compared with nil.
        Due to the invalid comparison we actually don't check for prompt
        in nested case.
      - Add trailing space to prompt in this test case.
      - Reset readline configuration in this test case.
      
      NO_CHANGELOG=test fix
      NO_DOC=test fix
      b4b9cc93
  2. Jan 17, 2024
    • Vladimir Davydov's avatar
      space: optimize lookup by id · e06b866a
      Vladimir Davydov authored
      In contrast to space_cache_find(), space_by_id() doesn't cache the last
      looked up space to speed up following lookups. This is confusing,
      because one would expect the only difference between space_cache_find()
      and space_by_id() functions to be that the former sets diag while the
      latter doesn't. Let's move the prev_space cache to space_by_id() to fix
      this issue.
      
      To achieve that we need to make space_by_id() inline, which is tricky
      because it's called via FFI. We work around that by defining a macro
      space_by_id() which expands to space_by_id_fast() while still keeping
      the space_by_id() symbol for FFI.
      
      Last but not least, we make the last cached space global (currently it's
      instantiated once per each space_cache_find() call site). This is a good
      thing because we often call space_by_id() a few times while processing
      the same DML request (e.g. in memtx mvcc).
      
      NO_DOC=no user-visible behavior changes
      NO_TEST=no user-visible behavior changes
      NO_CHANGELOG=no user-visible behavior changes
      e06b866a
    • Yaroslav Lobankov's avatar
      ci: drop testing for FreeBSD 12, add for FreeBSD 14 · 9ee99c5f
      Yaroslav Lobankov authored
      - Drop testing for FreeBSD 12 since FreeBSD 14 is available
      - Add testing for FreeBSD 14
      
      NO_DOC=ci
      NO_TEST=ci
      NO_CHANGELOG=ci
      9ee99c5f
  3. Jan 16, 2024
    • Ilya Verbin's avatar
      box: introduce fixed-size numeric field types · 2e0f9a3c
      Ilya Verbin authored
      See the docbot request for details.
      
      Closes #9548
      
      @TarantoolBot document
      Title: Document fixed-size numeric field types
      Product: Tarantool
      Since: 3.1
      Root document: https://www.tarantool.io/en/doc/latest/concepts/data_model/value_store/#field-type-details
      
       ### Fixed-size field types
      
      Tarantool supports the following fixed-size numeric field types:
      
       * `uint8`: integer in range [0 .. 255]
       * `int8`: integer in range [-128 .. 127]
       * `uint16`: integer in range [0 .. 65,535]
       * `int16`: integer in range [-32,768 .. 32,767]
       * `uint32`: integer in range [0 .. 4,294,967,295]
       * `int32`: integer in range [-2,147,483,648 .. 2,147,483,647]
       * `uint64`: integer in range [0 .. 18,446,744,073,709,551,615]
       * `int64`: integer in range [-9,223,372,036,854,775,808 ..
                                     9,223,372,036,854,775,807]
       * `float32`: 32-bit floating point number
       * `float64`: 64-bit floating point number
      
      These types don't affect how data is stored in Tarantool's memtx or vinyl
      engines but they enforce the limits when a tuple is inserted or updated.
      2e0f9a3c
    • Ilya Verbin's avatar
      box: rewrite field_type1_contains_type2() · fe4f0223
      Ilya Verbin authored
      All the information needed by this function is stored in `field_mp_type[]'
      and `field_ext_type[]'. Get rid of redundant `field_type_compatibility[]',
      which is hard to extend and which can introduce additional bugs.
      
      NO_DOC=refactoring
      NO_CHANGELOG=refactoring
      fe4f0223
    • Ilya Verbin's avatar
      box: fix field_type1_contains_type2(FIELD_TYPE_DOUBLE, ...) · 3ffefe3b
      Ilya Verbin authored
      commit 51af059c ("box: compare and hash msgpack value of double key
      field as double") changed `field_mp_type[FIELD_TYPE_DOUBLE]', but the
      corresponding column of `field_type_compatibility[]' wasn't updated.
      
      Now a field of type DOUBLE can store MP_UINT and MP_INT, i.e. it can
      store any value from fields of type UNSIGNED, NUMBER, INTEGER.
      In fact, FIELD_TYPE_DOUBLE is now an alias for FIELD_TYPE_NUMBER.
      
      It's hard to create a test, because e.g. during CheckSpaceFormat even if
      field_type1_contains_type2() erroneously returns false, then each tuple is
      correctly validated anyway. So this patch actually fixes performance issue.
      
      NO_TEST=see above
      NO_DOC=minor fix
      NO_CHANGELOG=minor fix
      3ffefe3b
  4. Jan 15, 2024
    • Vladimir Davydov's avatar
      space: drop space upgrade state ref counting · 87627322
      Vladimir Davydov authored
      Not used since we moved result processing to the memtx engine.
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      87627322
    • Vladimir Davydov's avatar
      index: drop result processor used for space upgrade · 5ce9a371
      Vladimir Davydov authored
      Initially, we tried to upgrade tuples in the engine-independent code,
      for which purpose we added the result processor, see commit 21e2def9
      ("box: introduce result processor"). It turned out, we still need to do
      some upgrade-related work in the memtx engine, see commit f7a520ef
      ("box: don't apply space upgrade func to DML result except for DELETE")
      and commit 921a0717 ("memtx: add stubs to keep track of upgraded
      read view tuples"). Since the memtx engine is the only engine that
      currently supports space upgrade, let's simplify the code by moving
      space upgrade handling completely in the memtx engine. This is easy to
      do because we already have memtx_prepare_result_tuple() helper that
      decompresses tuples before returning them to the user, which seems to be
      the perfect place for handling upgrade.
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      5ce9a371
  5. Jan 12, 2024
    • Vladimir Davydov's avatar
      test: make wal_off/alter robust against system tuple format count · 57b90288
      Vladimir Davydov authored
      We have to update the test every time we add a new system tuple format
      because it checks the number of spaces that can be created before the
      tuple format count limit is reached. Let's loosen the space count check
      to avoid that.
      
      We do this for the new memcs engine, which will be introduced to
      Tarantool Enterprise Edition, because it will create a tuple format to
      serve internal needs.
      
      Needed for tarantool/tarantool-ee#617
      
      NO_DOC=test fix
      NO_CHANGELOG=test fix
      57b90288
    • Vladimir Davydov's avatar
      index: add read view iterator destructor · f224b7ed
      Vladimir Davydov authored
      We need it for the memcs engine. The generic implementation used by
      other engines just trashes the iterator object.
      
      Needed for tarantool/tarantool-ee#617
      
      NO_DOC=internal
      NO_TEST=internal
      NO_CHANGELOG=internal
      f224b7ed
    • Vladimir Davydov's avatar
      box: add memcs engine initialization stub · 1112b5d8
      Vladimir Davydov authored
      The stub will be implemented in Tarantool Enterprise Edition.
      
      Needed for tarantool/tarantool-ee#617
      
      NO_DOC=stub
      NO_TEST=stub
      NO_CHANGELOG=stub
      1112b5d8
    • Vladimir Davydov's avatar
      engine: let other engines reuse memtx checkpoint and join · fd44364a
      Vladimir Davydov authored
      The implementation of the checkpoint and join memtx engine methods
      is actually generic: all they need is a read view. Let's allow
      other engines that support creation of a consistent read view to be
      checkpointed and joined by the memtx engine by setting the corresponding
      engine flags.
      
      Currently, there's no such engines, i.e. the only engine setting the new
      flags is memtx itself. We will use this feature for new engines.
      
      Needed for tarantool/tarantool-ee#617
      
      NO_DOC=internal
      NO_TEST=internal
      NO_CHANGELOG=internal
      fd44364a
    • Nikolay Shirokovskiy's avatar
      replication: replication graceful shutdown · 8d7af954
      Nikolay Shirokovskiy authored
      This implies finishing replication TX fibers and stopping applier
      threads. This is easy to do using existing applier_stop.
      
      We also need to make sure that there is no client fibers are in
      replication code after shutdown. Otherwise we may have difficulties
      (assertions) while freeing replication resources. This goal have two
      sides. First we have to finish client fibers waiting in replication code
      and second we should not allow to wait after shutdonw is done.
      
      Here we probably can achieve first side by just stopping appliers. But in
      this case client will get error other than FiberIsCancelled which is
      nice to have. So approach is to track client fibers in replication code
      and cancel them on shutdown. This approach is also aligned with
      iproto/relay shutdown.
      
      There is issue with graceful replication shutdown though. A good example
      (on which `replication/shutdown_test.lua` is based) is bootstrapping
      a replica with wrong auth in replication URI. In this case applier is
      sleeping in reconnect delay and bootstrap code waiting for READY state.
      Now comes server shutdown.
      
      Applier is stopped during shutdown and we hit assertion [1]. The issue
      is we miss bootstrap fiber notification that applier fiber is cancelled.
      That's why the change with `fiber_testcancel` in `applier_f`.
      
      We also drop the assertion in the `replica_on_applier_sync` because
      applier can switch to OFF state from any previous state if we cancel
      applier fiber.
      
      Part of #8423
      
      [1] Issue assertion stack:
      ```
        #5  0x00007fe877a54d26 in __assert_fail (
          assertion=0x5637b683b07c "fiber() == applier->fiber",
          file=0x5637b683a03e "./src/box/applier.cc", line=2809,
          function=0x5637b683b05f "void applier_pause(applier*)") at assert.c:101
        #6  0x00005637b62f0f20 in applier_pause (applier=0x5637b7a87a60)
          at /home/shiny/dev/tarantool/src/box/applier.cc:2809
        #7  0x00005637b62f104b in applier_on_state_f (trigger=0x7fe877380a60,
          event=0x5637b7a87a60) at /home/shiny/dev/tarantool/src/box/applier.cc:2845
        #8  0x00005637b645d2e3 in trigger_run_list (list=0x7fe877280de0,
          event=0x5637b7a87a60) at /home/shiny/dev/tarantool/src/lib/core/trigger.cc:100
        #9  0x00005637b645d401 in trigger_run (list=0x5637b7a88098, event=0x5637b7a87a60)
          at /home/shiny/dev/tarantool/src/lib/core/trigger.cc:133
        #10 0x00005637b62e4d6b in trigger_run_xc (list=0x5637b7a88098, event=0x5637b7a87a60)
          at /home/shiny/dev/tarantool/src/lib/core/trigger.h:173
        #11 0x00005637b62e703a in applier_set_state (applier=0x5637b7a87a60,
          state=APPLIER_OFF) at /home/shiny/dev/tarantool/src/box/applier.cc:83
        #12 0x00005637b62f0ab3 in applier_stop (applier=0x5637b7a87a60)
          at /home/shiny/dev/tarantool/src/box/applier.cc:2749
        #13 0x00005637b62dc189 in replication_shutdown ()
      ```
      
      NO_CHANGELOG=internal
      NO_DOC=internal
      8d7af954
    • Nikolay Shirokovskiy's avatar
      appiler: do not keep applier diag in applier fiber diag · 307ef45c
      Nikolay Shirokovskiy authored
      Currently last applier error is keeped in fiber diag. This leads to some
      hacks like the return of -1 from applier fiber to keep the diag (fiber
      diag is cleared if fiber return value is 0). Also we do not use applier
      fiber diag as it intended - as diag set to current fiber on applier fiber
      join. Let's instead keep applier diag in a different place.
      
      Also let's copy error in `applier_wait_for_state` so that fiber error is
      not disappeared in case of bootstrap.
      
      Part of #8423
      
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      NO_DOC=refactoring
      307ef45c
  6. Jan 11, 2024
    • Vladimir Davydov's avatar
      index: introduce weak reference · a76eb242
      Vladimir Davydov authored
      An iterator doesn't pin the index it was created for. Instead, it holds
      a 'weak' reference to it, which is invalidated if the index is dropped.
      This is achieved by checking if the index can be found in the space
      cache by id every time the reference is accessed. Let's factor out this
      weak reference concept into a separate class so that we can reuse it
      because we'll also need it to implement the index scanner API.
      
      Needed for #9568
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      a76eb242
    • Yaroslav Lobankov's avatar
      ci: drop testing for macOS 12, add for macOS 14 · 19f9786f
      Yaroslav Lobankov authored
      - Drop testing for macOS 12 since macOS 14 is available
      - Add testing for macOS 14
      
      NO_DOC=ci
      NO_TEST=ci
      NO_CHANGELOG=ci
      19f9786f
    • Yaroslav Lobankov's avatar
      ci: rm workarounds from `install-deps-osx` action · 3142fb66
      Yaroslav Lobankov authored
      The issue [1] is closed, and it looks like the problem doesn't exist
      now. So removing the respective workaround from the action.
      
      Also, removing the workaround with upgrading packages as it is not
      needed anymore because now `brew` just gives a warning instead of
      failing when the package is already installed.
      
      [1] https://github.com/gevent/gevent/issues/1721
      
      NO_DOC=ci
      NO_TEST=ci
      NO_CHANGELOG=ci
      3142fb66
    • Yaroslav Lobankov's avatar
      ci: ignore fail on artifact upload to S3 for osx · 5137ea59
      Yaroslav Lobankov authored
      From time to time, the step to upload job artifacts to S3 fails due to
      the following error:
      
          Error: Unable to retrieve job ID by provided job name
      
      It happens in the `s3-upload-artifact` action that tries to get job ID
      by the name via the `get-job-id` action. Job ID is needed to compose the
      proper artifact name. `get-job-id` performs a request to GitHub for the
      list of workflow jobs and finds the job by its name and then gets its
      ID.
      
      For some reason, sometimes GitHub doesn't give the complete job list and
      there is no chance to find the job and get its ID. At least, it has been
      noticed for the osx.yml workflow with 36 parallel jobs.
      
      It looks like the issue resides on the GitHub side and the simplest way
      to resolve this is to ignore the failure and not fail the whole workflow
      due to this GitHub bug.
      
      NO_DOC=ci
      NO_TEST=ci
      NO_CHANGELOG=ci
      5137ea59
    • Yaroslav Lobankov's avatar
      ci: fix uploading build artifacts to S3 for freebsd · 5fa3d5a2
      Yaroslav Lobankov authored
      When the `freebsd` workflow has become a matrix one in 0bd15468
      ("ci: mv freebsd testing from per-commit to nightly"), we forgot
      to do the corresponding changes in the `Upload artifacts to S3` step.
      So adding missing changes.
      
      NO_DOC=ci
      NO_TEST=ci
      NO_CHANGELOG=ci
      5fa3d5a2
    • Yaroslav Lobankov's avatar
      ci: fix saving build artifacts for osx and freebsd · 64363b43
      Yaroslav Lobankov authored
      When `${{ matrix.tarantool-branch}}` is `release/3.0` or similar, the
      step to save build artifacts will fail with the following error:
      
          Error: Artifact name is not valid: osx-13-x86_64-release/3.0-debug.
          Contains the following character:  Forward slash /
      
      This commit fixes the issue.
      
      NO_DOC=ci
      NO_TEST=ci
      NO_CHANGELOG=ci
      64363b43
    • Sergey Kaplun's avatar
      test: fix flaky tests when JIT is enabled · 1a5e3bf3
      Sergey Kaplun authored
      <box/net.box_reconnect_after_gh-3164.test.lua> and
      <vinyl/tx_gap_lock.test.lua> checking some objects that should be
      collected may fail because these objects are referenced as the upvalues
      for a function inlined on some JIT trace. The objects aren't leaked;
      tests don't consider the JIT semantics. See more details in [1].
      
      This patch disables JIT for the first test.
      
      The second test itself isn't affected since the commit
      tarantool/test-run@33fbace8307e64e66b0b2178ac952b2697673917 ("Add
      default server restart to each test run"). Because of this commit, the
      `tx.gap_locks` can't be affected by the use of the `create_iterator()`
      function in other tests.
      But to avoid similar situations in the future, the JIT is disabled for
      the `res.next()` function in test utils.
      
      [1]: https://github.com/tarantool/tarantool/wiki/LuaJIT-function-inlining
      
      Closes tarantool/tarantool-qa#233
      Closes tarantool/tarantool-qa#276
      
      NO_DOC=fix flaky test
      NO_CHANGELOG=see NO_DOC
      1a5e3bf3
  7. Jan 10, 2024
    • Mergen Imeev's avatar
      box: remove static_assert() from field_def.h · 01cdfa6c
      Mergen Imeev authored
      This patch removes the static_assert(). This static_assert was necessary
      because after commit 037e2e44 ("sql: clean-up affinity from SQL
      source code") and before commit 078bcf00 ("sql: remove implicit cast
      from comparison opcodes"), 4 bits of the p5 field of the struct VdbeOp
      were used to store the field type in VDBE comparison opcodes. After the
      commit 078bcf00 ("sql: remove implicit cast from comparison
      opcodes"), these opcodes no longer need the field type, so this
      static_assert() is now unneeded.
      
      NO_DOC=refactoring
      NO_TEST=refactoring
      NO_CHANGELOG=refactoring
      01cdfa6c
  8. Dec 29, 2023
  9. Dec 27, 2023
  10. Dec 26, 2023
    • Sergey Ostanevich's avatar
      changelog: cleanup 3.0.0 changelogs · 03c184d4
      Sergey Ostanevich authored
      Remove all changelogs reported in release notes for 3.0.0.
      
      NO_CHANGELOG=changelog
      NO_DOC=changelog
      NO_TEST=changelog
      03c184d4
    • Andrey Saranchin's avatar
      lua: use the new trigger API in swim triggers · 2d9c039b
      Andrey Saranchin authored
      New swim:on_member_event triggers use a slightly changed new trigger API
      because it uses closures as triggers and a context can be passed.
      Firstly, swim:on_member_event returns closure over the new trigger
      instead of passed handler. Secondly, ctx can be passed as the second
      argument - it is considered as an old trigger if the object is callable
      and as ctx otherwise. Also, ctx can be passed as the third argument - it
      is considered as name if it is string and as ctx otherwise. And, ctx can
      be passed as the fourth argument. When one uses key-value API, ctx can
      be passed with key "ctx".
      
      Closes #6484
      Closes #8659
      
      NO_DOC=later
      2d9c039b
    • Andrey Saranchin's avatar
      lua: provide old trigger API with name · 0e689b84
      Andrey Saranchin authored
      Triggers that were moved to the trigger registry accept trigger name as
      an optional argument and allow to set triggers using new key-value API.
      Let's provide triggers, that were not moved to the trigger registry yet,
      with the same functionality. For this purpose the main trigger setter,
      lbox_trigger_reset, is updated.
      
      Backward compatibility is a bit broken after this patch. Firstly, all
      the triggers were listed in order of their insertion, which is reversed
      order of their actual layout and call. Now they are listed in direct
      oreder of call.
      
      The patch changes API for all the triggers that were not moved to the
      trigger registry except for swim triggers - this case is a bit more
      complicated because of context that can be passed to the swim triggers.
      
      Note that argument `top` of `lbox_trigger_reset` is changed to `bottom`
      because all passed `top`s became irrelevant with the introduction of the
      third argument - changing it to `bottom` will help avoid a similar
      problem in the future.
      
      Along the way, make transactional triggers' error more descriptive and
      add box.session.on_access_denied to the test - it wasn't tested by
      mistake.
      
      Part of #6484
      Part of #8659
      
      NO_CHANGELOG=later
      NO_DOC=later
      0e689b84
    • Andrey Saranchin's avatar
      lua: implement internal.trigger in C · 6d882740
      Andrey Saranchin authored
      The patch rewrites Lua implementation of trigger list in C as a wrapper
      over list of lbox triggers.
      
      Backward compatibility is a bit broken after this patch. Firslty, despite
      usually all the triggers are inserted to the beginning of the trigger list,
      trigger list, implemented in Lua, inserted new triggers at the end. The
      patch fixes this inconsistency. Also, triggers using lbox_trigger_reset
      return nil when a trigger is deleted, and triggers using Lua implementation
      return removed trigger in this case. The behavior is unified now - all
      triggers return nil on deletion.
      
      Part of #6484
      Part of #8659
      
      NO_CHANGELOG=internal
      NO_DOC=internal
      6d882740
    • Sergey Bronnikov's avatar
      httpc: use http 1.1 by default · aa58c212
      Sergey Bronnikov authored
      Commit 0ea1ba87 ("third_party: update libcurl from 8.3.0 to 8.4.0")
      bumps libcurl version and bringed a regression: http client returns
      nothing using connection with HTTP/2 protocol. The problem could be
      reproduced by etcd-client, see description in issue [1]. The problem in
      http client is due to commit "h2: testcase and fix for pausing h2
      streams" [2] in libcurl. With reverted commit in libcurl the problem is
      gone.
      
      To work around the issue, commit sets HTTP 1.1 as default protocol in
      http client.
      
      Needed for #9547
      
      1. https://github.com/tarantool/tarantool/issues/9547
      2. https://github.com/curl/curl/commit/6b9a591bf7d82031f463373706d7de1cba0adee6
      
      NO_CHANGELOG=workaround
      NO_DOC=workaround
      NO_TEST=etcd client's tests in Tarantool EE
      aa58c212
Loading