Skip to content
Snippets Groups Projects
  1. Apr 20, 2020
    • Alexander Turenko's avatar
      popen: always free resources in popen_delete() · 01657bfb
      Alexander Turenko authored
      The function still set a diagnostics when a signal sending fails and
      returns -1, but it is purely informational result: for logging or so. It
      reflects notes about dealing with failures in Linux's `man 2 close`:
      
       | Note, however, that a failure return should be used only for
       | diagnostic purposes <...> or remedial purposes <...>.
       |
       | <...> Linux  kernel always releases the file descriptor early in the
       | close operation, freeing it for reuse; the steps that may return an
       | error <...> occur only later in the close operation.
       |
       | Many other implementations similarly always close the file descriptor
       | <...> even if they subsequently report an error on return from
       | close(). POSIX.1 is currently silent on this point, but there are
       | plans to mandate this behavior in the next major release of the
       | standard.
      
      When kill or killpg returns EPERM a caller usually unable to overcome it
      somehow: retrying is not sufficient here. So there are no needs to keep
      the handle: a caller refuses the handle and don't want to perform any
      other operation on it.  The open engine do its best to kill a child
      process or a process group, but when it is not possible, just set the a
      diagnostic and free handle resources anyway.
      
      Left comments about observed Mac OS behaviour regarding killing a
      process group, where all processes are zombies (or just when a process
      group leader is zombie, don't sure): it gives EPERM instead of ESRCH
      from killpg(). This result should not surprise a user, so it should be
      documented. See [1] for another description of the problem (I don't find
      any official information about this).
      
      [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=1329528
      
      
      
      Part of #4031
      
      Acked-by: default avatarCyrill Gorcunov <gorcunov@gmail.com>
      (cherry picked from commit 56a8c346ecb0581300a63c6e677d8a4672ff1f95)
      01657bfb
    • Alexander Turenko's avatar
      net.box: fix fetching of schema of an old version · 06edcbe1
      Alexander Turenko authored
      After 2.2.0-633-gaa0964ae1 ('net.box: fix schema fetching from 1.10/2.1
      servers') net.box expects that _vcollation system view exists on a
      tarantool server of 2.2.1+ version. This is however not always so: a
      server may be run on a new version of tarantool, but work on a schema of
      an old version.
      
      The situation with non last schema is usual for replication cluster in
      process of upgrading: all instances run on the new version of tarantool
      first (no auto-upgrade is performed by tarantools in a cluster). Then
      box.schema.upgrade() should be called, but the instances should be
      operable even before the call.
      
      Before the commit net.box was unable to connect a server if it is run on
      a schema without _vcollation system view (say, 2.1.3), but the server
      executable is of 2.2.1 version or newer.
      
      Note: I trim tests from the commit to polish them a bit more, but
      include the fix itself to 2.4.1 release.
      
      Follows up #4307
      Fixes #4691
      06edcbe1
    • Igor Munkin's avatar
      test: adjust luajit-tap testing machinery · 335f80a0
      Igor Munkin authored
      
      This changeset makes possible to run luajit-tap tests requiring
      libraries implemented in C:
      * symlink to luajit test is created on configuration phase instead of
        build one.
      * introduced a CMake function for building shared libraries required for
        luajit tests.
      
      Furthermore this commit enables CMake build for the following luajit-tap
      tests:
      * gh-4427-ffi-sandwich
      * lj-flush-on-trace
      
      Reviewed-by: default avatarVladislav Shpilevoy <v.shpilevoy@tarantool.org>
      Reviewed-by: default avatarSergey Ostanevich <sergos@tarantool.org>
      Signed-off-by: default avatarIgor Munkin <imun@tarantool.org>
      335f80a0
    • Kirill Yukhin's avatar
      luajit: bump new version · a1594091
      Kirill Yukhin authored
      
      - jit: abort trace execution on JIT mode change
      - jit: abort trace recording and execution for C API
      
      Reviewed-by: default avatarVladislav Shpilevoy <v.shpilevoy@tarantool.org>
      Signed-off-by: default avatarIgor Munkin <imun@tarantool.org>
      a1594091
  2. Apr 18, 2020
    • Alexander V. Tikhonov's avatar
      build: fix build with CMake 2 · 930c7463
      Alexander V. Tikhonov authored
      Found that some package builds failed on the mistake in CMakeLists.txt
      file, the failed packages and test builds were:
      - CentOS 6
      - CentOS 7
      - Ubuntu 14.04
      and static build based on Dockerfile.
      
      The core of the issue is that CMake 2 does not support line continuation
      with backslash.
      
      The commit fixes the regression from
      7b443650 ('feedback: add cmake option to
      disable the daemon').
      
      Follow up #3308
      930c7463
  3. Apr 17, 2020
  4. Apr 16, 2020
    • Mergen Imeev's avatar
      sql: do not change order of inserted values · 2cc7e608
      Mergen Imeev authored
      Before this patch, if an ephemeral space was used during INSERT or
      REPLACE, the inserted values were sorted by the first column,
      since this was the first part of the index. This can lead to an
      error when using the AUTOINCREMENT feature, since changing the
      order of the inserted value can change the value inserted instead
      of NULL. To avoid this, the patch makes the rowid of the inserted
      row in the ephemeral space the only part of the ephemeral space
      index.
      
      Closes #4256
      2cc7e608
    • Mergen Imeev's avatar
      sql: specify field types in ephemeral space format · 2103f587
      Mergen Imeev authored
      This patch specifies field types in ephemeral space format in SQL.
      Prior to this patch, all fields had a SCALAR field type.
      
      This patch allows us to not use the primary index to obtain field
      types, since now the ephemeral space has field types in the
      format. This allows us to change the structure of the primary
      index, which helps to solve the issue #4256. In addition, since we
      can now set the field types of the ephemeral space, we can use
      this feature to set the field types according to the left value of
      the IN operator. This will fix issue #4692.
      
      Needed for #4256
      Needed for #4692
      Closes #3841
      2103f587
    • Mergen Imeev's avatar
      box: extend ephemeral space format · 032de39f
      Mergen Imeev authored
      This patch allows to set field types and names in ephemeral space
      formats.
      
      Needed for #4256
      Needed for #4692
      Part of #3841
      032de39f
    • Serge Petrenko's avatar
      relay: move relay_schedule_pending_gc before status update · e7ffddce
      Serge Petrenko authored
      relay_schedule_pending_gc() is executed after relay status update,
      which made perfect sense before we've introduced local spaces rework, making
      local space operations use a special instance id: 0.
      Relay status update is performed only when the remote instance has
      reported a bigger vclock, than its previous one. However, we may have an
      entire WAL file filled with local space changes, in which case the
      changes won't be transmitted to replica, and it will report the same
      vclock as before, postponing the scheduled gc until a non-local row is
      created on master.
      
      Fix this by reordering relay_schedule_pending_gc() and relay status
      update. In case nothing new is added to pending_gc queue and replica
      clock is not updated, relay_schedule_pending_gc() will exit on the first
      loop iteration, so it doesn't add an overhead.
      
      Also make relay_schedule_pending_gc() use vclock_compare_ignore0() instead
      of plain vclock_compare().
      
      Follow-up #4114
      e7ffddce
  5. Apr 15, 2020
    • Mergen Imeev's avatar
      sql: add '\0' to the BLOB when it is cast to INTEGER · a39e6a01
      Mergen Imeev authored
      Prior to this patch, due to the absence of the '\0' character at
      the end of the BLOB, it was possible to get an error or incorrect
      result when using CAST() from BLOB to INTEGER or UNSIGNED. This
      has now been fixed, but the maximum length of a BLOB that could be
      cast to INTEGER or UNSIGNED was limited to 12287 bytes.
      
      Examples of wrong CAST() from BLOB to INTEGER:
      
      CREATE TABLE t (i INT PRIMARY KEY, a VARBINARY, b INT, c INT);
      INSERT INTO t VALUES (1, X'33', 0x33, 0x00), (2, X'34', 0x41, 0);
      
      Example of wrong result:
      
      SELECT CAST(a AS INTEGER) FROM t WHERE i = 1;
      
      Result: 33
      
      Example of error during CAST():
      
      SELECT CAST(a AS INTEGER) FROM t WHERE i = 2;
      
      Result: 'Type mismatch: can not convert varbinary to integer'
      
      Closes #4766
      a39e6a01
    • Mergen Imeev's avatar
      sql: fix implicit cast from STRING to INTEGER · 6e6de43c
      Mergen Imeev authored
      Prior to this patch, STRING, which contains the DOUBLE value,
      could be implicitly cast to INTEGER. This was done by converting
      STRING to DOUBLE and then converting this DOUBLE value to INTEGER.
      This may affect the accuracy of CAST(), so it was forbidden. It
      is worth noting that these changes will not affect the comparison,
      since the implicit cast in this case has different mechanics.
      
      Example:
      box.execute("CREATE TABLE t(i INT PRIMARY KEY);")
      
      Before patch:
      box.execute("INSERT INTO t VALUES ('111.1');")
      box.execute("SELECT * FROM t;")
      Result: 111
      
      After patch:
      box.execute("INSERT INTO t VALUES ('1.1');")
      Result: 'Type mismatch: can not convert 1.1 to integer'
      
      box.execute("INSERT INTO t VALUES ('1.0');")
      Result: 'Type mismatch: can not convert 1.0 to integer'
      
      box.execute("INSERT INTO t VALUES ('1.');")
      Result: 'Type mismatch: can not convert 1. to integer'
      
      @TarantoolBot document
      Title: disallow cast from STRING contains DOUBLE to INTEGER
      
      After the last two patches, explicit and implicit casting from the
      string containing DOUBLE to INTEGER directly will be prohibited.
      The user must use the explicit cast to DOUBLE before the explicit
      or implicit cast to INTEGER. The reason for this is that before
      these patches, such STRINGs were implicitly cast to DOUBLE, and
      then this DOUBLE was implicitly or explicitly cast to INTEGER.
      Because of this, the result of such a cast may differ from what
      the user expects, and the user may not know why.
      
      It is worth noting that these changes will not affect the
      comparison, since the implicit cast in this case has different
      mechanics.
      
      Example for implicit cast:
      
      box.execute("CREATE TABLE t(i INT PRIMARY KEY);")
      -- Does not work anymore:
      box.execute("INSERT INTO t VALUES ('1.1');")
      -- Right way:
      box.execute("INSERT INTO t VALUES (CAST('1.1' AS DOUBLE));")
      
      Example for explicit cast:
      
      -- Does not work anymore:
      box.execute("SELECT CAST('1.1' AS INTEGER);")
      -- Right way:
      box.execute("SELECT CAST(CAST('1.1' AS DOUBLE) AS INTEGER);")
      6e6de43c
    • Mergen Imeev's avatar
      sql: fix CAST() from STRING to INTEGER · 11352a32
      Mergen Imeev authored
      Prior to this patch, STRING, which contains the DOUBLE value,
      could be cast to INTEGER. This was done by converting STRING to
      DOUBLE and then converting this DOUBLE value to INTEGER. This may
      affect the accuracy of CAST(), so it was forbidden.
      
      Before patch:
      box.execute("SELECT CAST('111.1' as INTEGER);")
      Result: 111
      
      After patch:
      box.execute("SELECT CAST('1.1' as INTEGER);")
      Result: 'Type mismatch: can not convert 1.1 to integer'
      
      box.execute("SELECT CAST('1.0' as INTEGER);")
      Result: 'Type mismatch: can not convert 1.0 to integer'
      
      box.execute("SELECT CAST('1.' as INTEGER);")
      Result: 'Type mismatch: can not convert 1. to integer'
      11352a32
    • Alexander V. Tikhonov's avatar
      gitlab-ci: move sources tarball creation to gitlab · 34f87bc6
      Alexander V. Tikhonov authored
      Moved sources tarball creation from travis-ci to gitlab-ci,
      moved its jobs for sources packing and sources deploying.
      
      Close #4895
      34f87bc6
    • Alexander V. Tikhonov's avatar
      Divide box/ddl.test.lua test · 4a8d1ebd
      Alexander V. Tikhonov authored
      Divided into tests:
      - box/ddl_alter.test.lua
      - box/ddl_collation.test.lua
      - box/ddl_collation_types.test.lua
      - box/ddl_collation_wrong_id.test.lua
      - box/ddl_no_collation.test.lua
      - box/ddl_parallel.test.lua
      - box/ddl_tuple.test.lua
      - box/gh-2336-ddl_call_twice.test.lua
      - box/gh-2783-ddl_lock.test.lua
      - box/gh-2839-ddl_custom_fields.test.lua
      - box/gh-2937-ddl_collation_field_def.test.lua
      - box/gh-3290-ddl_collation_deleted.test.lua
      - box/gh-928-ddl_truncate.test.lua
      4a8d1ebd
    • Alexander V. Tikhonov's avatar
      gitlab-ci: remove Ubuntu 19.04 Disco · 05df6b31
      Alexander V. Tikhonov authored
      Removed Ubuntu 19.04 Disco from testing which is EOL.
      
      Close #4896
      05df6b31
    • Alexander V. Tikhonov's avatar
      Added ability to remove packages from S3 · d6c50af1
      Alexander V. Tikhonov authored
      Added ability to remove given in options package from S3. TO remove the
      needed package need to set '-r=<package name with version>' option,
      like:
        ./tools/update_repo.sh -o=<OS> -d=<DIST> -b=<S3 repo> \
          -r=tarantool-2.2.2.0
      it will remove all found appropriate source and binaries packages from
      the given S3 repository, also the meta files will be corrected there.
      
      Close #4839
      d6c50af1
    • Alexander.V Tikhonov's avatar
      Add help instruction on 'product' option · cccc989c
      Alexander.V Tikhonov authored
      Added instructions on 'product' option with examples.
      
      Part of #4839
      cccc989c
    • Alexander.V Tikhonov's avatar
      Enable script for saving packages in S3 for modules · 4527a4da
      Alexander.V Tikhonov authored
      Found that modules may have only binaries packages w/o sources
      packages. Script changed to be able to work with only binaries
      either sources packages.
      
      Part of #4839
      4527a4da
    • Alexander V. Tikhonov's avatar
      Add metafiles cleanup routines at S3 pack script · ed491409
      Alexander V. Tikhonov authored
      Added cleanup functionality for the meta files.
      Script may have the following situations:
      
       - package files removed at S3, but it still registered:
         Script stores and registers the new packages at S3 and
         removes all the other registered blocks for the sames
         files in meta files.
      
       - package files already exists at S3 with the same hashes:
         Script passes it with warning message.
      
       - package files already exists at S3 with the old hashes:
         Script fails w/o force flag, otherwise it stores and
         registers the new packages at S3 and removes all the other
         registered blocks for the sames files in meta files.
      
      Added '-s|skip_errors' option flag to skip errors on changed
      packages to avoid of exits on script run.
      
      Part of #4839
      ed491409
    • Alexander V. Tikhonov's avatar
      gitlab-ci: set static docker build release testing · 6f618d62
      Alexander V. Tikhonov authored
      Returned the static build based on Dockerfile to gitlab-ci release branches
      testing after the issues with missed openssl version fixed at PR #4831.
      
      Follow up #4831
      
      (cherry picked from commit b09f44b856e91f1006bd5b3e226a7be0b65b7859)
      6f618d62
    • Alexander V. Tikhonov's avatar
      build: disable cache for static build Dockerfile · c5d27312
      Alexander V. Tikhonov authored
      Found that static build based on Dockerfile used external link
      and missed that it was removed, like it was in #4830. To avoid
      of the same issues the cache for building the Dockerfile was
      disabled with '--no-cache' option at docker build command.
      
      Follow up #4830
      
      (cherry picked from commit 1207821e4fc18312a9916d81a55a8eacd75a67b3)
      c5d27312
    • Sergey Bronnikov's avatar
      Enable branch coverage in lcov · 5842157c
      Sergey Bronnikov authored
      By default lcov collects line coverage only. It would be useful to
      collect function and branch coverage too.
      
      Closes #4888
      5842157c
Loading