Skip to content
Snippets Groups Projects
  1. Oct 24, 2019
    • Oleg Babin's avatar
      build: fix static build condition about testing · 058e8f0e
      Oleg Babin authored
      
      Before this patch RUN_TESTS condition in Dockerfile.staticbuild was
      ignored and always was true.
      
      However adding of brackets solves only part of problem. If RUN_TESTS is
      empty `sh -c` returns 1 and build fails.
      
      However if we run tests we should fail build if tests are not passed.
      Ternary logic was rewritten to fair if-else.
      
      This patch fixes it and allows build tarantool statically without
      running tests.
      
      @Totktonada: Fixed .gitlab.mk to pass RUN_TESTS environment variable to
      docker build arguments.
      
      Reviewed-by: default avatarAlexander Turenko <alexander.turenko@tarantool.org>
      (cherry picked from commit 8c85dbc7)
      Unverified
      058e8f0e
  2. Oct 23, 2019
  3. Oct 21, 2019
  4. Oct 17, 2019
  5. Oct 15, 2019
    • Alexander Turenko's avatar
      test: update test-run · af7a8aba
      Alexander Turenko authored
      test_run:wait_upstream() and test_run:wait_downstream() now wait until
      an upstream / a downstream appears. This prevents an attempt to index a
      nil value when one of those functions are called before a record about a
      peer appears in box.info.replication. It was observed on
      replication/show_error_on_disconnect test after commit
      c6bea65f ('replication: recfg with 0
      quorum returns immediately').
      
      Fixes #4563.
      
      (cherry picked from commit 18864835)
      Unverified
      af7a8aba
  6. Oct 12, 2019
    • Vladislav Shpilevoy's avatar
      replication: recfg with 0 quorum returns immediately · cb4d0fcd
      Vladislav Shpilevoy authored
      Replication quorum 0 not only affects orphan status, but also,
      according to documentation, makes box.cfg() return immediately
      regardless of whether connections to upstreams are established.
      
      It was not so before the patch. What is worse, even with non 0
      quorum the instance was blocked on reconfiguration for connect
      timeout seconds, if at least one node is not connected.
      
      Now quorum is respected on reconfiguration. On a bootstrap it is
      still impossible to return earlier than
      replication_connect_timeout, because nodes need to choose some
      cluster settings. Too early start would make it impossible -
      cluster's participants will just start and choose different
      cluster UUIDs.
      
      Closes #3760
      
      (cherry picked from commit c6bea65f)
      cb4d0fcd
  7. Oct 09, 2019
    • Serge Petrenko's avatar
      replication: add is_orphan field to ballot · 17958322
      Serge Petrenko authored
      A successfully fetched remote instance ballot isn't updated during
      bootstrap procedure. This leads to a case when different instances
      choose different masters as their bootstrap leaders.
      
      Imagine such a situation.
      You start instance A without replication set up. Instance A successfully
      bootstraps.
      You also have instances B and C both with replication set up to {A, B,
      C} and replication_connect_quorum set to 3
      You first start instance B. It doesn't proceed to choosing a leader
      until one of the events happens: either the replication_connect_timeout
      runs out, or instance C is up and starts listening on its port.
      B has established connection to A and fetched its ballot, with some
      vclock, say, {1: 1}.
      B retries connection to C every replication_timeout seconds.
      Then you start instance C. Instance C succeeds in connecting to A and B
      right away and bootstraps from instance A. Instance A registers C in its
      _cluster table. This registration is replicated to instance C.
      Meanwhile, instance C is trying to sync with quorum instances (which is
      3), and stays in orphan mode.
      Now replication_timeout on instance B finally runs out. It retries a
      previously unsuccessful connection to C and succeeds. C sends its ballot
      to B with vclock = {1: 2, 2:0} (in our example), since it has already
      incremented it after _cluster registration.
      B sees that C has a greater vclock than A, and chooses to bootstrap from
      C instead of A. C is orphan and rejects B's attempt to join. B dies.
      
      To fix such ungentlemanlike behaviour of C, we should at least include
      loading status in ballot and prefer fully bootstrapped instances to the
      ones still syncing with other replicas.
      We also need to use a separate flag instead of ballot's already existent
      is_ro, since we still want to prefer loading instances over the ones
      explicitly configured to be read-only.
      
      Closes #4527
      
      (cherry picked from commit dc1e4009)
      17958322
    • Kirill Yukhin's avatar
      luajit: freeBSD/x64: avoid changing resource limits, if not needed · e321e679
      Kirill Yukhin authored
      (cherry picked from commit 8749b3e1)
      e321e679
    • Cyrill Gorcunov's avatar
      box/console: Fix missing variable declaration · 9357d13f
      Cyrill Gorcunov authored
      
      During rework of the console lua mode series
      the declaration of variable has been lost and
      this cause test case for remote unix console
      connection to fail.
      
      Fixes issue from c358398c
      
      Signed-off-by: default avatarCyrill Gorcunov <gorcunov@gmail.com>
      (cherry picked from commit df821d0f)
      9357d13f
  8. Oct 04, 2019
  9. Oct 01, 2019
    • Roman Khabibov's avatar
      Fix 53d43160 · 5d402716
      Roman Khabibov authored
      (cherry picked from commit 0b9de586)
      5d402716
    • Roman Khabibov's avatar
      json: clarify bad syntax error messages · 87e1f960
      Roman Khabibov authored
      Count lines in the json parsing structure. It is needed to print
      the number of line and column where a mistake was made.
      
      Closes #3316
      
      (cherry picked from commit 9f9bd3eb2d064129ff6b1a764140ebef242d7ff7)
      (cherry picked from commit 53d43160)
      87e1f960
    • Vladislav Shpilevoy's avatar
      app: exit gracefully when a main script throws an error · 44597aa1
      Vladislav Shpilevoy authored
      Code to run main script (passed via command line args, or
      interactive console) has a footer where it notifies systemd,
      logs a happened error, and panics.
      
      Before the patch that code was unreachable in case of any
      exception in a main script, because panic happened earlier. Now a
      happened exception is correctly carried to the footer with proper
      error processing.
      
      A first and obvious solution was replace all panics with diag_set
      and use fiber_join on the script runner fiber. But appeared, that
      the fiber running a main script can't be joined. This is because
      normally it exits via os.exit() which never returns and therefore
      its caller never dies = can't be joined.
      
      The patch solves this problem by passing main fiber diag to the
      script runner by pointer, eliminating fiber_join necessity.
      
      Closes #4382
      
      (cherry picked from commit 157a2d88)
      44597aa1
  10. Sep 25, 2019
    • Vladislav Shpilevoy's avatar
      app: raise an error on too nested tables serialization · d8fe9316
      Vladislav Shpilevoy authored
      Closes #4434
      Follow-up #4366
      
      @TarantoolBot document
      Title: json/msgpack.cfg.encode_deep_as_nil option
      
      Tarantool has several so called serializers to convert data
      between Lua and another format: YAML, JSON, msgpack.
      
      YAML is a crazy serializer without depth restrictions. But for
      JSON, msgpack, and msgpackffi a user could set encode_max_depth
      option. That option led to crop of a table when it had too many
      nested levels. Sometimes such behaviour is undesirable.
      
      Now an error is raised instead of data corruption:
      
          t = nil
          for i = 1, 100 do t = {t} end
          msgpack.encode(t) -- Here an exception is thrown.
      
      To disable it and return the old behaviour back here is a new
      option:
      
          <serializer>.cfg({encode_deep_as_nil = true})
      
      Option encode_deep_as_nil works for JSON, msgpack, and msgpackffi
      modules, and is false by default. It means, that now if some
      existing users have cropping, even intentional, they will get the
      exception.
      
      (cherry picked from commit d7a8942a)
      d8fe9316
    • Vladislav Shpilevoy's avatar
      tuple: use global msgpack serializer in Lua tuple · 503dcd14
      Vladislav Shpilevoy authored
      Tuple is a C library exposed to Lua. In Lua to translate Lua
      objects into tuples and back luaL_serializer structure is used.
      
      In Tarantool we have several global serializers, one of which is
      for msgpack. Tuples store data in msgpack, and in theory should
      have used that global msgpack serializer. But in fact the tuple
      module had its own private serializer because of tuples encoding
      specifics such as never encode sparse arrays as maps.
      
      This patch makes tuple Lua module use global msgpack serializer
      always. But how does tuple handle sparse arrays now? In fact,
      the tuple module still has its own serializer, but it is updated
      each time when the msgpack serializer is changed.
      
      Part of #4434
      
      (cherry picked from commit 676369b1)
      503dcd14
    • Vladislav Shpilevoy's avatar
      msgpack: make msgpackffi use encode_max_depth option · e9c41b82
      Vladislav Shpilevoy authored
      Msgpack Lua module is not a simple set of functions. It is a
      global serializer object used by plenty of other Lua and C
      modules. Msgpack as a serializer can be configured, and in theory
      its configuration updates should affect all other modules. For
      example, a user could change encode_max_depth:
      
          require('msgpack').cfg({encode_max_depth = <new_value>})
      
      And that would make tuple:update() accept tables with <new_value>
      depth without a crop.
      
      But in fact msgpack configuration didn't affect some places, such
      as this one. And all the others who use msgpackffi.
      
      This patch fixes it, for encode_max_depth option. Other options
      are still ignored.
      
      Part of #4434
      
      (cherry picked from commit 4bb253f7)
      e9c41b82
    • Vladislav Shpilevoy's avatar
      app: serializers update now is reflected in Lua · ad46eb01
      Vladislav Shpilevoy authored
      There are some objects called serializers - msgpack, cjson, yaml,
      maybe more. They are global objects affecting both Lua and C
      modules.
      
      A serializer have settings which can be updated. But before the
      patch an update changed only C structure of the serializer. It
      made impossible to use settings of the serializers from Lua.
      
      Now any update of any serializer is reflected both in its C and
      Lua structures.
      
      Part of #4434
      
      (cherry picked from commit fe4a8047)
      ad46eb01
  11. Sep 20, 2019
  12. Sep 19, 2019
    • Alexander V. Tikhonov's avatar
      build: FreeBSD packages installation · 272081ac
      Alexander V. Tikhonov authored
      Found that the curl failed to build on FreeBSD with errors:
      gmake[2]: Entering directory '/home/vagrant/tarantool/third_party/curl/src'
        CCLD     curl
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `SSLv23_client_method'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `CONF_modules_free'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `ERR_free_strings'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `sk_value'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `ENGINE_cleanup'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `SSL_library_init'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `EVP_MD_CTX_destroy'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `sk_pop_free'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `SSLeay'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `SSL_get_ex_new_index'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `OPENSSL_add_all_algorithms_noconf'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `SSL_COMP_free_compression_methods'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `EVP_MD_CTX_create'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `EVP_cleanup'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `sk_num'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `sk_pop'
      /usr/local/bin/ld: ../lib/.libs/libcurl.so: undefined reference to `SSL_load_error_strings'
      collect2: error: ld returned 1 exit status
      gmake[2]: *** [Makefile:921: curl] Error 1
      
      Found root cause of the issue at the `./configure <...>` output:
       | checking for OpenSSL headers version... 1.0.2 - 0x1000214fL
       | checking for OpenSSL library version... 1.1.1
       | configure: WARNING: OpenSSL headers and library versions do not match.
      It is seen that the Tarantool bootstrap installed pkg 'openssl'
      of the version '1.0.2', while the currently default FreeBSD 'openssl'
      version was '1.1.1'.
      
      Anyway we don't need any special openssl version installed against
      default one, so the fix is just to remove the openssl package from
      bootstrap installation.
      Also found that some installing packages are not needed too,
      removed it from FreeBSD bootstrap.
      
      Additionally added libiconv library into bootstrap which is needed
      as workaround to avoid of the issue described in:
      	https://github.com/tarantool/tarantool/issues/3791
      
      Closed #4490
      
      (cherry picked from commit 1f2338bd)
      Unverified
      272081ac
  13. Sep 17, 2019
    • Mergen Imeev's avatar
      sql: make valueToText() operate on MAP/ARRAY values · 8c261507
      Mergen Imeev authored
      Since ARRAY and MAP cannot be converted to SCALAR type, this
      operation should throw an error. But when the error is raised in
      SQL, it is displayed in unreadable form. The reason for this is
      that the given array or map is not correctly converted to a
      string. This patch fixes the problem by converting ARRAY or MAP to
      their string representation.
      For example:
      
      box.execute('CREATE TABLE t1(i INT PRIMARY KEY, a SCALAR);')
      format = {}
      format[1] = {type = 'integer', name = 'I'}
      format[2] = {type = 'array', name = 'A'}
      s = box.schema.space.create('T2', {format=format})
      i = s:create_index('ii')
      s:insert({1, {1,2,3}})
      box.execute('INSERT INTO t1 SELECT * FROM t2;')
      
      Should return:
      - error: 'Type mismatch: can not convert [1, 2, 3] to scalar'
      
      Follow-up #4189
      
      (cherry picked from commit 736cdd81)
      8c261507
    • Mergen Imeev's avatar
      sql: add ARRAY, MAP and ANY types to mem_apply_type() · edb07115
      Mergen Imeev authored
      Function mem_apply_type() implements implicit type conversion. As
      a rule, tuple to be inserted to the space is exposed to this
      conversion which is invoked during execution of OP_MakeRecord
      opcode (which in turn forms tuple). This function was not adjusted
      to operate on ARRAY, MAP and ANY field types since they are poorly
      supported in current SQL implementation. Hence, when tuple to be
      inserted in space having mentioned field types reaches this
      function, it results in error. Note that we can't set ARRAY or MAP
      types in SQL, but such situation may appear during UPDATE
      operation on space created via Lua interface. This problem is
      solved by extending implicit type conversions with obvious casts:
      array field can be casted to array, map to map and any to any.
      
      Closes #4189
      
      (cherry picked from commit de79b714)
      edb07115
    • Maria's avatar
      Proper error handling for fio.mktree · 9f18eedb
      Maria authored
      Method fio.mktree is used to create given path unconditionally -
      without checking if it was a directory or something else. This
      led to inappropriate error messages or even inconsistent behavior.
      Now check the type of a given path.
      
      Closes #4439
      
      (cherry picked from commit 8ccfc691)
      9f18eedb
  14. Sep 16, 2019
    • Oleg Babin's avatar
      rocks: fix zero values in ziptime · 4a4df77f
      Oleg Babin authored
      If the rock was packed with luarocks then the time in it is set to zeros
      and this is not the case with the unix format can be removed when date given
      is added to zipwriter_open_new_file_in_zip (luarocks/luarocks#1056)
      
      Closes #4481
      
      (cherry picked from commit 3658cb00)
      4a4df77f
    • Nikita Pettik's avatar
      sql: swap FK masks during altering of space · d0e1612f
      Nikita Pettik authored
      It was forgotten to swap old and new mask (holding fields involved into
      foreign key relation) during space alteration (lists of object
      representing FK metadata are swapped successfully). Since mask is vital
      and depending on its value different byte-codes implementing SQL query
      can be produced, this mistake resulted in assertion fault in debug build
      and wrong constraint check in release build. Let's fix this bug and swap
      masks as well as foreign key lists.
      
      Closes #4495
      
      (cherry picked from commit 33236ecc)
      d0e1612f
Loading