Skip to content
Snippets Groups Projects
  1. Sep 10, 2019
  2. Sep 09, 2019
    • Kirill Shcherbatov's avatar
      lua_cjson: fix segfault on recursive table encoding · 664788a3
      Kirill Shcherbatov authored
      The json.encode() used to cause a segfault in case of recursive
      table:
        tbl = {}
        tbl[1] = tbl
        json.encode(tbl)
      
      Library doesn't test whether given object on Lua stack parsed
      earlier, because it performs a lightweight in-depth traverse
      of Lua stack. However it must stop when encode_max_depth is
      reached (by design).
      
      Tarantool's lua_cjson implementation has a bug introduced during
      porting original library: it doesn't handle some corner cases:
      entering into a map correctly increases a current depth, while
      entering into an array didn't. This patch adopts author's
      approach to check encode_max_depth limit. Thanks to handling this
      constraint correctly the segfault no longer occurs.
      
      Closes #4366
      664788a3
  3. Aug 22, 2019
    • Serge Petrenko's avatar
      decimal: add conversions to (u)int64_t · 8d2e7839
      Serge Petrenko authored
      Update decNumber library, add methods to convert decimals to uint64_t
      and int64_t, add unit tests.
      Also replace decimal_round() function with decimal_round_with_mode() to
      allow setting rounding mode.
      We need to round with mode DEC_ROUND_DOWN in to_int64 conversions in
      order to be consistent with double to int conversions.
      It will be needed to compute hints for decimal fields.
      
      Prerequisite #4333
      8d2e7839
    • Serge Petrenko's avatar
      decimal: allow to encode/decode decimals as MsgPack · 485439e3
      Serge Petrenko authored
      This patch adds the methods necessary to encode and decode decimals to
      MsgPack. MsgPack EXT type (MP_EXT) together with a new extension type
      MP_DECIMAL is used as a record header.
      
      The decimal MsgPack representation looks like this:
      +--------+-------------------+------------+===============+
      | MP_EXT | length (optional) | MP_DECIMAL | PackedDecimal |
      +--------+-------------------+------------+===============+
      The whole record may be encoded and decoded with
      mp_encode_decimal() and mp_decode_decimal(). This is equivalent to
      performing mp_encode_extl()/mp_decode_extl() on the first 3 fields and
      decimal_pack/unpack() on the PackedDecimal field.
      
      It is also possible to decode and encode decimals to msgpack from lua,
      which means you can insert decimals into spaces, but only into unindexed
      fields for now.
      
      Follow up #692
      Part of #4333
      485439e3
  4. Aug 21, 2019
    • Mergen Imeev's avatar
      build: link libcurl statically from a submodule · 7e51aebb
      Mergen Imeev authored
      Hold libcurl-7.65.3. This version is not affected by the following
      issues:
      
      * #4180 ('httpc: redirects are broken with libcurl-7.30 and older');
      * #4389 ('libcurl memory leak');
      * #4397 ('HTTPS seem to be unstable').
      
      After this patch libcurl will be statically linked when
      ENABLE_BUNDLED_LIBCURL option is set. This option is set by default.
      
      Closes #4318
      
      @TarantoolBot document
      Title: Tarantool dependency list was changed
      
      * Added build dependencies: autoconf, automake, libtool, zlib-devel
        (zlib1g-dev on Debian).
      * Added runtime dependencies: zlib (zlib1g on Debian).
      * Removed build dependencies: libcurl-devel (libcurl4-openssl-dev on
        Debian).
      * Removed runtime dependencies: curl.
      
      The reason is that now we use compiled-in libcurl: so we don't depend on
      a system libcurl, but inherit its dependencies.
      7e51aebb
  5. Aug 15, 2019
  6. Jul 24, 2019
  7. Jul 18, 2019
  8. Jun 16, 2019
  9. Jun 13, 2019
    • Serge Petrenko's avatar
      lib/core: introduce decimal type to tarantool · 6d62c6c1
      Serge Petrenko authored
      Add fixed-point decimal type to tarantool core.
      Adapt decNumber floating-point decimal library for the purpose, write a
      small wrapper and add unit tests.
      
      A new decimal type is an alias for decNumber numbers from the decNumber
      library.
      Arithmetic operations (+, -, *, /) and some mathematic functions
      (ln, log10, exp, pow, sqrt) are available together with methods to
      pack and unpack decimal to and from its packed representation (useful
      for serialization).
      
      We introduce a single context for all the arithmetic operations
      on decimals, which enforces both number precision and scale to be
      in range [0, 38]. NaNs and Infinities are restricted.
      
      Part of #692
      6d62c6c1
  10. May 29, 2019
  11. May 28, 2019
  12. May 23, 2019
  13. Mar 15, 2019
  14. Feb 25, 2019
    • Alexander Turenko's avatar
      lua-yaml: fix strings literals encoding in yaml · 4095e305
      Alexander Turenko authored
      yaml.encode() now wraps a string literal whose content is equal to a
      null or a boolean value representation in YAML into single quotes. Those
      literals are: 'false', 'no', 'true', 'yes', '~', 'null'.
      
      Reverted the a2d7643c commit to use single quotes instead of multiline
      encoding for 'true' and 'false' string literals.
      
      Follows up #3476
      Closes #3662
      Closes #3583
      4095e305
    • AKhatskevich's avatar
      lua-yaml: verify args in a consistent manner · e925356e
      AKhatskevich authored
      Use lua_is*() functions instead of explicit lua_gettop() checks in
      yaml.encode() and yaml.decode() functions.
      
      Behaviour changes:
      
      * yaml.decode(object, nil) ignores nil (it is consistent with encode
        behaviour).
      * yaml.encode() gives an usage error instead of "unsupported Lua type
        'thread'".
      * yaml.encode('', {}, {}) ignores 3rd argument (it is consistent with
        decode behaviour).
      e925356e
  15. Nov 15, 2018
    • Yaroslav Dynnikov's avatar
      third-party: update luarocks submodule · 10f4db86
      Yaroslav Dynnikov authored
      I. Fixes tarantoolctl rocks install hanging in resctricted networks
      corner-case.
      
      A customer configured two rocks servers:
      1. offline (file:///path/to/rocks)
      2. and default online (rocks.tarantool.org)
      
      He tries to do `rocks install http 1.0.5-1`.
      
      Online server is unavailable due to his local network policy, but
      the rock is available offline. Despite anything, luarocks still
      tries to fetch manifest online, which results in 30 sec hang since
      network access is restricted.
      
      This change aborts scanning when exact match is found
      
      II. Remove cyclic dependencies
      
      This is required to embed luarocks into tarantool, as
      current tarantool preloader can't preload cyclic dependencies.
      There should be a unidirectional dependency graph and
      predictable order.
      
      Note: as a consequence of this patch, operating systems other that
      unix-compatible ones are no longer supported. This is because I
      had to manually resolve dependency graph for predictable require()
      order.
      
      III. Use digest.md5_hex to compute md5 digests instead of openssl
      
      luarocks has support for calculating md5 with 'md5' rock if it's
      present, but we don't have it in tarantool, and instead have the
      'digest' module. That's why luarocks falls back to 'openssl' binary
      to calculate md5 digests.
      
      This patch will allow luarocks to use our internal digests module.
      10f4db86
  16. Sep 13, 2018
    • Roman Khabibov's avatar
      json: add options to json.encode() · 1663bdc4
      Roman Khabibov authored
      Add an ability to pass options to json.encode()/decode().
      
      Closes: #2888.
      
      @TarantoolBot document
      Title: json.encode() json.decode()
      Add an ability to pass options to
      json.encode() and json.decode().
      These are the same options that
      are used globally in json.cfg().
      1663bdc4
  17. Sep 06, 2018
    • Georgy Kirichenko's avatar
      Tarantool static build ability · cb1c72da
      Georgy Kirichenko authored
      A possibility to build tarantool with included library dependencies.
      Use the flag -DBUILD_STATIC=ON to build statically against curl, readline,
      ncurses, icu and z.
      Use the flag -DOPENSSL_USE_STATIC_LIBS=ON to build with static
      openssl
      
      Changes:
        * Add FindOpenSSL.cmake because some distributions do not support the use of
        openssl static libraries.
        * Find libssl before curl because of build dependency.
        * Catch all bundled libraries API and export then it in case of static
        build.
        * Rename crc32 internal functions to avoid a name clash with linked libraries.
      
      Notes:
        * Bundled libyaml is not properly exported, use the system one.
        * Dockerfile to build static with docker is included
      
      Fixes #3445
      cb1c72da
  18. Jul 19, 2018
  19. Jul 13, 2018
  20. Jul 12, 2018
  21. Jul 10, 2018
    • Kirill Shcherbatov's avatar
      app: fix parsing integers with exponent in json · f9f89acb
      Kirill Shcherbatov authored
      Now it is possible to specify a number in exponential
      form via all formats allowed by json standard.
      json.decode('{"remained_amount":2.0e+3}')
      json.decode('{"remained_amount":2.0E+3}')
      json.decode('{"remained_amount":2e+3}')
      json.decode('{"remained_amount":2E+3}')     <-- fixed
      
      Closes #3514.
      f9f89acb
  22. May 31, 2018
    • Vladislav Shpilevoy's avatar
      console: use Lua C API to do formatting for console · ac715203
      Vladislav Shpilevoy authored
      YAML formatting C API is needed for #2677, where it will be used
      to send text pushes and prints as tagged YAML documents.
      
      Push in the next patches is implemented as a virtual C method of
      struct session, so it is necessary to be able format YAML from C.
      
      Needed for #2677
      ac715203
    • Vladislav Shpilevoy's avatar
      yaml: introduce yaml.decode tag_only option · 567769d0
      Vladislav Shpilevoy authored
      Yaml.decode tag_only option allows to decode a single tag of a
      YAML document. For #2677 it is needed to detect different push
      types in text console: print pushes via console.print, and actual
      pushes via box.session.push.
      
      To distinguish them YAML tags will be used. A client console for
      each message will try to find a tag. If a tag is absent, then the
      message is a simple response to a request.
      
      If a tag is !print!, then the document consists of a single
      string, that must be printed. Such a document must be decoded to
      get the printed string. So the calls sequence is
      yaml.decode(tag_only) + yaml.decode. The reason why a print
      message must be decoded is that a print() result on a server side
      can be not well-formatted YAML, and must be encoded into it to be
      correctly sent. For example, when I do on a server side something
      like this:
      
      console.print('very bad YAML string')
      
      The result of a print() is not a YAML document, and to be sent it
      must be encoded into YAML on a server side.
      
      If a tag is !push!, then the document is sent via
      box.session.push, and must not be decoded. It can be just printed
      or ignored or something.
      
      Needed for #2677
      567769d0
    • Vladislav Shpilevoy's avatar
      lua: merge encode_tagged into encode options · b2da28f8
      Vladislav Shpilevoy authored
      Encode_tagged is a workaround to be able to pass options to
      yaml.encode().
      
      Before the patch yaml.encode() in fact has this signature:
      yaml.encode(...). So it was impossible to add any options to this
      function - all of them would be treated as the parameters. But
      documentation says: https://tarantool.io/en/doc/1.9/reference/reference_lua/yaml.html?highlight=yaml#lua-function.yaml.encode
      that the function has this signature: yaml.encode(value).
      
      I hope if anyone uses yaml.encode(), he does it according to the
      documentation. And I can add the {tag_prefix, tag_handle} options
      to yaml.encode() and remove yaml.encode_tagged() workaround.
      b2da28f8
  23. May 30, 2018
    • Vladislav Shpilevoy's avatar
      yaml: introduce yaml.encode_tagged · ddcd95a0
      Vladislav Shpilevoy authored
      Encode_tagged allows to define one global YAML tag for a
      document. Tagged YAML documents are going to be used for
      console text pushes to distinguish actual box.session.push() from
      console.print(). The first will have tag !push, and the
      second - !print.
      ddcd95a0
  24. May 07, 2018
    • Vladislav Shpilevoy's avatar
      yaml: don't throw OOM on any error in yaml encoding · fcba4a1a
      Vladislav Shpilevoy authored
      OOM is not single possible error. Yaml library during dump can
      raise such errors as YAML_MEMORY_ERROR, YAML_WRITER_ERROR,
      YAML_EMITTER_ERROR. And each of them can contain any error
      message that is skipped now, because Tarantool YAML does not
      provide such API, that can lead to a non-OOM error.
      
      But it is changed in next commits.
      fcba4a1a
  25. May 03, 2018
  26. Mar 30, 2018
    • Vladimir Davydov's avatar
      Update LuaRocks · 3171288c
      Vladimir Davydov authored
      Closes #3148
      3171288c
    • Vladimir Davydov's avatar
      libev: use clock_gettime on OS X if available · 10af1cb1
      Vladimir Davydov authored
      EV_USE_REALTIME and EV_USE_MONOTONIC, which force libev to use
      clock_gettime, are enabled automatically on Linux, but not on OS X. We
      used to forcefully enable them for performance reasons, but this broke
      compilation on certain OS X versions and so was disabled by commit
      d36ba279 ("Fix gh-1777: clock_gettime detected but unavailable in
      macos"). Today we need these features enabled not just because of
      performance, but also to avoid crashes when time changes on the host -
      see issue #2527 and commit a6c87bf9 ("Use ev_monotonic_now/time
      instead of ev_now/time for timeouts"). Fortunately, we have this cmake
      defined macro HAVE_CLOCKGETTIME_DECL, which is set if clock_gettime is
      available. Let's enable EV_USE_REALTIME and EV_USE_MONOTONIC if this
      macro is defined.
      
      Closes #3299
      10af1cb1
  27. Feb 26, 2018
  28. Jan 27, 2018
  29. Oct 05, 2017
  30. Sep 26, 2017
    • Vladislav Shpilevoy's avatar
      Introduce base64_encode options · cd4e26d4
      Vladislav Shpilevoy authored
      * no-wrap: do not wrap each 72 result symbols on a new line;
      * no-pad:  do not add padding at the end of a result;
      * urlsafe: no-wrap + no-pad + replace '+' -> '-' and '/' -> '_'.
      
      Closes #2777
      Closes #2478
      Closes #2479
      cd4e26d4
  31. Sep 18, 2017
  32. Sep 12, 2017
    • Roman Tsisyk's avatar
      Add FALLTHROUGH macro · 3ce62ef8
      Roman Tsisyk authored
      The fallthrough attribute with a null statement serves as a fallthrough
      statement. It hints to the compiler that a statement that falls through
      to another case label, or user-defined label in a switch statement is
      intentional and thus the -Wimplicit-fallthrough warning must not trigger.
      The fallthrough attribute may appear at most once in each attribute list,
      and may not be mixed with other attributes. It can only be used in a switch
      statement (the compiler will issue an error otherwise), after a preceding
      statement and before a logically succeeding case label, or user-defined
      label.
      
      https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/
      3ce62ef8
  33. Aug 22, 2017
    • Vladimir Davydov's avatar
      libev: export ev_monotonic_now() and ev_monotonic_time() · 230cef34
      Vladimir Davydov authored
      ev_now()/ev_time() are affected by system time changes, which makes them
      impractical for calculating timeouts. Introduce ev_monotonic_now() and
      ev_monotonic_time() which work exactly as ev_now()/ev_time(), but use
      monotonic clock instead of realtime.
      
      Needed for #2527
      230cef34
Loading