Skip to content
Snippets Groups Projects
  1. Oct 21, 2019
  2. Oct 17, 2019
    • Vladislav Shpilevoy's avatar
      wal: drop rows_per_wal option · b2b6eb54
      Vladislav Shpilevoy authored
      Rows_per_wal option was deprecated because it can be covered by
      wal_max_size. In order not to complicate WAL code with that
      option's support this commit drops it completely.
      
      In some tests the option was used to create several small xlog
      files. Now the same is done via wal_max_size. Where it was
      needed, number of rows per wal is estimated as wal_max_size / 50.
      Because struct xrow_header size ~= 50 not counting paddings and
      body.
      
      Note, file box/configuration.result was deleted here, because it
      is a stray result file, and it contained the rows_per_wal option
      mentioning. Its test was dropped much earlier in
      fdc3d1dd.
      
      Closes #3762
      
      (cherry picked from commit c6012920)
      b2b6eb54
    • Vladislav Shpilevoy's avatar
      test: replication/misc cleanup box.cfg.replication · 4b5e974a
      Vladislav Shpilevoy authored
      In patch c6bea65f I
      added a bug - replication/misc leaves a bad value in
      box.cfg.replication. Before that patch the test was
      resetting this to empty replication. In my patch I
      forgot about that, and left there the value
      
          {box.cfg.listen, "12345"}
      
      This patch cleans it up.
      
      Follow up #3760
      
      (cherry picked from commit 399899a1)
      4b5e974a
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. Sep 16, 2019
    • 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
  9. Sep 12, 2019
    • Mergen Imeev's avatar
      sql: test suite for BOOLEAN · 08151e93
      Mergen Imeev authored
      This patch provides a test suite that allows us to make sure that
      the SQL BOOLEAN type works as intended.
      
      Part of #4228
      
      (cherry picked from commit 7cf84a54)
      08151e93
    • Serge Petrenko's avatar
      replication: disallow bootstrap of read-only masters · 60354954
      Serge Petrenko authored
      In a configuration with several read-only and read-write instances, if
      replication_connect_quorum is not greater than the amount of read-only
      instances and replication_connect_timeout happens to be small enough
      for some read-only instances to form a quorum and exceed the timeout
      before any of the read-write instaces start, all these read-only
      instances will choose themselves a read-only bootstrap leader.
      This 'leader' will successfully bootstrap itself, but will fail to
      register any of the other instances in _cluster table, since it isn't
      writeable. As a result, some of the read-only instances will just die
      unable to bootstrap from a read-only bootstrap leader, and when the
      read-write instances are finally up, they'll see a single read-only
      instance which managed to bootstrap itself and now gets a
      REPLICASET_UUID_MISMATCH error, since no read-write instance will
      choose it as bootstrap leader, and will rather bootstrap from one of
      its read-write mates.
      
      The described situation is clearly not what user has hoped for, so
      throw an error, when a read-only instance tries to initiate the
      bootstrap. The error will give the user a cue that he should increase
      replication_connect_timeout.
      
      Closes #4321
      
      @TarantoolBot document
      Title: replication: forbid to bootstrap read-only masters.
      
      It is no longer possible to bootstrap a read-only instance in an emply
      data directory as a master. You will see the following error trying to
      do so:
      ```
      ER_BOOTSTRAP_READONLY: Trying to bootstrap a local read-only instance as master
      ```
      Now if you have a fresh instance, which has
      `read_only=true` in an initial `box.cfg` call, you need to set up
      replication from an instance which is either read-write, or has your
      local instance's uuid in its `_cluster` table.
      
      In case you have multiple read-only and read-write instances with
      replication set up, and you still see the aforementioned error message,
      this means that none of your read-write instances managed to start
      listening on their port before read_only instances have exceeded the
      `replication_connect_timeout`. In this case you should raise
      `replication_connect_timeout` to a greater value.
      
      (cherry picked from commit 037bd58c)
      60354954
  10. Sep 11, 2019
    • Igor Munkin's avatar
      test: move luajit-tap suite to luajit repo · 22a6375f
      Igor Munkin authored
      * All test chunks related to luajit were moved from tarantool source
      tree to the luajit repo
      * Adjusted CMakeLists via creating a symlink to luajit test directory
      to fix out-of-source tests
      
      Closed #4478
      
      (cherry picked from commit 43575303)
      22a6375f
  11. Sep 09, 2019
    • Kirill Shcherbatov's avatar
      lua_cjson: fix segfault on recursive table encoding · 1862856d
      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
      
      (cherry picked from commit d2641e66e65ab57317b8e70bb7115517ec81238e)
      1862856d
  12. Sep 02, 2019
    • Alexander V. Tikhonov's avatar
      test: avoid of too long running sql-tap tests · d50b9d61
      Alexander V. Tikhonov authored
      The test sql-tap/gh-3083-ephemeral-unref-tuples.test.lua took
      too long runtime and failed to finish in timeout limit of 2
      minutes when it runs near the end of the running queue:
      
      No output during 120 seconds. Will abort after 120 seconds without output. List of workers not reporting the status:
      - 012_sql-tap [sql-tap/gh-3083-ephemeral-unref-tuples.test.lua, vinyl] at var/012_sql-tap/gh-3083-ephemeral-unref-tuples.result:0
      Test hung! Result content mismatch:
      [File does not exists: sql-tap/gh-3083-ephemeral-unref-tuples.result]
      [Main process] No output from workers. It seems that we hang. Send SIGKILL to workers; exiting...
      
      Due to suggestion from Konstantin Osipov at gh-3845:
      https://github.com/tarantool/tarantool/issues/3845#issue-385735959
      
      The following tests:
        gh-3083-ephemeral-unref-tuples.test.lua
        gh-3332-tuple-format-leak.test.lua
      where set to run only on memtx configuration.
      
      Also the test:
        gh-3083-ephemeral-unref-tuples.test.lua
      was removed from the test-run 'fragile' option flaky list.
      
      Closed #4128
      
      (cherry picked from commit 40c94af7)
      Unverified
      d50b9d61
  13. Aug 29, 2019
    • Alexander V. Tikhonov's avatar
      Set fragile option to flaky tests · 7fb559de
      Alexander V. Tikhonov authored
      Added "fragile" option to the flaky tests that are
      not intended to be run in parallel with others.
      Option set at the suite.ini file at the appropriate
      suites with comments including the issue that stores
      the fail.
      
      (cherry picked from commit 165f8ee6)
      7fb559de
  14. Aug 28, 2019
    • Kirill Yukhin's avatar
      Add missing test for _say patch · 8e2d5551
      Kirill Yukhin authored
      It turned out that patch d0e38d59 wasn't accompanied
      w/ a test. Add proper check.
      
      (cherry picked from commit c80e9416)
      8e2d5551
    • Serge Petrenko's avatar
      replication: enter orphan mode on manual replication configuration chage · cd627f26
      Serge Petrenko authored
      Currently we only enter orphan mode when instance fails to connect to
      replication_connect_quorum remote instances during local recovery.
      On bootstrap and manual replication configuration change an error is
      thrown. We better enter orphan mode on manual config change, and leave
      it only in case we managed to sync with replication_connect_quorum
      instances.
      
      Closes #4424
      
      @TarantoolBot document
      Title: document reaction on error in replication configuration change.
      
      Now when issuing `box.cfg{replication={uri1, uri2, ...}}` and failing to
      sync with replication_connect_quorum remote instances, the server will
      throw an error, if it is bootstrapping, and just set its state to orphan
      in all other cases (recovering from existing xlog/snap files or manually
      changing box.cfg.replication on the fly). To leave orphan mode, you may
      wait until the server manages to sync with replication_connect_quorum
      instances.
      In order to leave orphan mode you need to make the server sync with
      enough instances. To do so, you may either:
      1) set replication_connect_quorum to a lower value
      2) reset box.cfg.replication to exclude instances that cannot
         be reached or synced with
      3) just set box.cfg.replication to "" (empty string)
      
      (cherry picked from commit 5a0cfe02)
      cd627f26
  15. Aug 26, 2019
    • Alexander Turenko's avatar
      lua: pwd: fix passwd and group traversal · 1c9d817a
      Alexander Turenko authored
      CentOS 6 and FreeBSD 12 implementations of getpwuid() rewind
      setpwent()-{getpwent()}-endpwent() loop to a start that leads to a hang
      during pwd.getpwall() invoke. The same is true for a getgrgid() call
      during setgrent()-{getgrent()}-endgrent() loop.
      
      The commit modifies pwd module to avoid getpwuid() calls during passwd
      database traversal and to avoid getgrgid() calls when traversing groups.
      
      The commit also fixes the important regression on CentOS 6 after
      f5d8331e ('lua: workaround
      pwd.getpwall() issue on Fedora 29'): tarantool hungs during startup due
      to added getpwall() call. This made tarantool unusable on CentOS 6 at
      all.
      
      Aside of that the commit fixes another pwd.getgrall() problem: the
      function gaves password entries instead of group entries.
      
      Fixes #4428.
      Fixes #4447.
      Part of #4271.
      
      (cherry picked from commit 7753d350)
      1c9d817a
  16. Aug 23, 2019
  17. Aug 22, 2019
    • Nikita Pettik's avatar
      sql: use double_compare_uint64() for int<->float cmp · 12431ed4
      Nikita Pettik authored
      To compare floating point values and integers in SQL functions
      compare_uint_float() and compare_int_float() are used. Unfortunately,
      they contain bug connected with checking border case: that's not correct
      to cast UINT64_MAX (2^64 - 1) to double. Proper way is to use exp2(2^64)
      or predefined floating point constant. To not bother fixing function
      which in turn may contain other tricky places, let's use instead already
      verified double_compare_uint64(). So that we have unified way of
      integer<->float comparison.
      
      (cherry picked from commit 73a4a525)
      12431ed4
    • Nikita Pettik's avatar
      txn: erase old savepoint in case of name collision · 03cbc365
      Nikita Pettik authored
      Name duplicates are allowed for savepoints (both in our SQL
      implementation and in ANSI specification). ANSI SQL states that previous
      savepoint should be deleted. What is more, our doc confirms this fact
      and says that "...it is released before the new savepoint is set."
      Unfortunately, it's not true - currently old savepoint remains in the
      list. For instance:
      
      SAVEPOINT t;
      SAVEPOINT t;
      RELEASE SAVEPOINT t;
      RELEASE SAVEPOINT t; -- no error is raised
      
      Let's fix this and remove old savepoint from the list.
      
      (cherry picked from commit 8b8b6895)
      03cbc365
    • Nikita Pettik's avatar
      txn: merge struct sql_txn into struct txn · c9046042
      Nikita Pettik authored
      This procedure is processed in several steps. Firstly, we add name
      to struct txn_savepoint since we should be capable of operating on named
      savepoints (which in turn is SQL feature). Still, anonymous (in the sense
      of name absence) savepoints are also valid. Then, we add list (as
      implementation of stailq) of savepoints to struct txn: it allows us to
      find savepoint by its name. Finally, we patch rollback to/release
      savepoint routines: for rollback tail of the list containing savepoints
      is cut (but subject of rollback routine remains in the list); for
      release routine we cut tail including node being released.
      
      (cherry picked from commit 56096ff2)
      c9046042
  18. Aug 21, 2019
    • Mergen Imeev's avatar
      build: link libcurl statically from a submodule · 5fcca9dd
      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.
      
      (cherry picked from commit 7e51aebb)
      5fcca9dd
  19. Aug 16, 2019
    • Nikita Pettik's avatar
      Hotfix for b7d595ac · 94479e8d
      Nikita Pettik authored
      It was forgotten to update result file of sql/bind.test.lua
      in previous patch. Let's fix that and refresh sql/bind.result with
      up-to-date results.
      
      (cherry picked from commit 0894bec2)
      94479e8d
  20. Aug 15, 2019
  21. Aug 14, 2019
    • Alexander V. Tikhonov's avatar
      test: app/socket flaky fails at 1118 line · 109a304d
      Alexander V. Tikhonov authored
      Found that on high loaded hosts the test flaky fails at:
      
      [004] --- app/socket.result	Mon Jul 15 07:18:57 2019
      [004] +++ app/socket.reject	Tue Jul 16 16:37:35 2019
      [004] @@ -1118,7 +1118,7 @@
      [004]  ...
      [004]  ch:get(1)
      [004]  ---
      [004] -- true
      [004] +- null
      [004]  ...
      [004]  s:error()
      [004]  ---
      
      Found that the test in previous was used for testing the
      the channel get() function timeout and the error occurred
      on it, but later the checking error changed to:
      "builtin/socket.lua: attempt to use closed socket" and the
      test became not correct. Because for now it passes when the
      socket read function runs before the socket closing, but in
      this way read call doesn't wait. In the other way on high
      loaded hosts the close call may occure before read call and
      in this way read call halts and socket get call returns
      'null'. As seen both ways are not correct to check the error.
      Decided to remove this subtest.
      
      Check commit ba7a4fee ("Add tests for socket:close closes #360")
      
      Fixes #4354
      
      (cherry picked from commit 952d8d1d)
      109a304d
  22. Aug 13, 2019
    • Vladislav Shpilevoy's avatar
      json: detect a new invalid json path case · b70aae59
      Vladislav Shpilevoy authored
      JSON paths has no a strict standard, but definitely there is no
      an implementation, allowing to omit '.' after [], if a next token
      is a key. For example:
      
          [1]key
      
      is invalid. It should be written like that:
      
          [1].key
      
      Strangely, but we even had tests on the invalid case.
      
      Closes #4419
      
      (cherry picked from commit ef64ee51)
      b70aae59
  23. Aug 02, 2019
    • Vladimir Davydov's avatar
      relay: stop relay on subscribe error · 878e2a42
      Vladimir Davydov authored
      In case an error occurs between relay_start() and cord_costart() in
      relay_subscribe(), the relay status won't be reset to STOPPED. As a
      result, any further attempt to re-subscribe will fail with ER_CFG:
      duplicate connection with the same replica UUID. This may happen, for
      example, if the WAL directory happens to be temporarily inaccessible on
      the master.
      
      Closes #4399
      
      (cherry picked from commit 35ef3320)
      878e2a42
    • Nikita Pettik's avatar
      sql: make default type of NULL be boolean · ffccbbd8
      Nikita Pettik authored
      It was decided that null value in SQL by default should be of type
      boolean. Justification of such change is that according to ANSI boolean
      type in fact has three different values: true, false and unknown. The
      latter is basically an alias to null value.
      ffccbbd8
Loading