Skip to content
Snippets Groups Projects
  1. Apr 25, 2019
    • Nikita Pettik's avatar
      sql: remove sql_bind_value() function · 0f6d6419
      Nikita Pettik authored
      It is not used (since we dispatch call of sql_bind_*type*() in
      sql_bind_column()), so can be removed.
      0f6d6419
    • Nikita Pettik's avatar
      sql: use msgpack types instead of custom ones · 56e7b657
      Nikita Pettik authored
      This patch provides straightforward refactoring replacing enum sql_type
      with enum mp_type. Note that we use msgpack format instead of field_type
      since it is more suitable when dealing with NULLs.
      56e7b657
    • Nikita Pettik's avatar
      sql: disallow text values participate in sum() aggregate · 3a12e0c3
      Nikita Pettik authored
      It is obvious that we can't add string with number except the case when
      string is a number literal in quotes (aka '123' or '0.5'). Before this
      patch values which can't be converted to numbers were just skipped.
      Now error is raised. This patch also removes sql_value_numeric_type()
      function since it is not used anymore: instead we invoke
      mem_apply_numeric_type().
      3a12e0c3
    • Nikita Pettik's avatar
      sql: refactor mem_apply_numeric_type() · 936a3537
      Nikita Pettik authored
      Fix codestyle according to Tarantool guideline; remove unused argument
      from signature; make function non-static - we are going to use it in
      aggregate function sum() (src/box/sql/func.c) to attempt at converting
      string values to numbers.
      936a3537
  2. Apr 24, 2019
    • Alexander Turenko's avatar
      httpc: temporary disable redirecting test case · 4cc6978a
      Alexander Turenko authored
      Redirects can work improperly with libcurl-7.30 and older. CentOS 7
      provides libcurl-7.29, so app-tap/http_client.test.lua fails on the
      corresponding test case in CI. We need to disable the test case until
      #4180 will be resolved.
      
      While we are here fixed httpd.py to write a response at once, not
      char-by-char (the typo from daf1ced8). See
      gevent/pywsgy.py::process_result().
      
      Related to #4119 and #4180.
      4cc6978a
  3. Apr 23, 2019
    • Шипицын Анатолий's avatar
      httpc: allow to don't auto-follow redirects · daf1ced8
      Шипицын Анатолий authored
      While we are here also added forgotten option descriptions to httpc.lua.
      
      @TarantoolBot document
      Title: httpc: new 'follow_location' option
      
      When the option is set to `true` (which is default) and a response has
      3xx code the http client will automatically issue another request to a
      location that a server sends in 'Location' header. If the new response
      is 3xx again, the http.client will issue a next request and so on in a
      loop until a non-3xx response will be received. This last response will
      be returned as a result.
      
      Setting this option to `false` allows to disable this behaviour. In this
      case the http client will return a 3xx response itself.
      
      See https://curl.haxx.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html
      daf1ced8
    • Kirill Shcherbatov's avatar
      httpc: update client error message · 5ebf9338
      Kirill Shcherbatov authored
      Previously Tarantool used to raise the confusing error message in
      case of invalid usage of the httpc module. Fixed to follow the
      current module API.
      
      Closes #4136
      5ebf9338
    • Kirill Shcherbatov's avatar
      box: fix empty tuple invalid update · 3eac590e
      Kirill Shcherbatov authored
      The tuple:update() used to work incorrectly in case of empty
      tuple produced with box.tuple.new{} because update_create_rope
      unconditionally initialized a new rope with [tuple_data,
      mp_next(tuple_data)] field that might not exists.
      
      Closes #4041
      3eac590e
    • Vladislav Shpilevoy's avatar
      sql: drop a useless check from lookupName() · 5e0ee714
      Vladislav Shpilevoy authored
      There was a variable used as a counter from 0 to
      uint32_t space_def->field_count. Obviously it can't be < 0, but
      there was a check for that. Drop it.
      
      The check was revealed during SQL BOOLEAN review, where one of
      patches gets rid of some explicit Expr.type assignments.
      5e0ee714
    • Roman Khabibov's avatar
      sql: modify TRIM() function signature · f95a34da
      Roman Khabibov authored
      According to the ANSI standard, ltrim, rtrim and trim should
      be merged into one unified TRIM() function. The specialization of
      trimming (left, right or both and trimming characters) determined
      in arguments of this function.
      
      Closes #3879
      
      @TarantoolBot document
      Title: TRIM() function
      
      Modify signature of SQL function TRIM(). This function removes
      characters included in <trim character> (binary) string from
      <trim source> (binary) string until encounter a character that doesn't
      belong to <trim character>. Removal occurs on the side, specified by
      <trim specification>. Now, syntax is following:
      TRIM([ [ <trim specification> ] [ <trim character> ] FROM ] <trim source>).
      
      <trim specification> can be one of the following keywords: LEADING,
      TRAILING and BOTH.
      <trim character> is the set of trimming characters.
      <trim source> is the string, that will be trimmed.
      If FROM is specified, then:
      1) Either <trim specification> or <trim character> or both shall be
      specified.
      2) If <trim specification> is not specified, then BOTH is implicit.
      3) If <trim character> is not specified, then ' ' is implicit.
      f95a34da
    • Mergen Imeev's avatar
      sql: remove unused code from main.c · 7bfbd1cd
      Mergen Imeev authored
      This patch removes part of unused functions and macros from
      main.c. This will facilitate the work of removing SQL error/status
      codes.
      
      Needed for #4074
      7bfbd1cd
  4. Apr 19, 2019
    • Kirill Yukhin's avatar
      sysview: set format for spaces with sysview engine · 5072227e
      Kirill Yukhin authored
      The patch sets format for spaces with sysview engine.
      This is done due to following reasons:
        1. Since an SQL view looks into underneath space's format, set
           it for spaces with sysview engine. Before the patch, spaces
           with sysview enginge didn't have its own tuples and hence
           didn't need to have a format.
        2. To use sysview engine to deal with SQL views. This will allow
           to use sysview machinery to query SQL views from Lua land.
      
      Closes #4111
      5072227e
  5. Apr 18, 2019
    • Vladislav Shpilevoy's avatar
      swim: drop incarnation_inc parameter from update() routines · c9eb277b
      Vladislav Shpilevoy authored
      Update_addr and update_payload need to increment member's
      incarnation when it is self. For that they used a special
      parameter incarnation_inc set in 1 for self and in 0 for others.
      
      It was used to encapsulate incarnation update + event scheduling
      on member attribute updates, but on the other hand it broke
      another encapsulation level - there should not be exceptions for
      'self' in these functions.
      
      This patch makes incarnation increment explicit in the places
      where 'self' is updated.
      c9eb277b
    • Vladislav Shpilevoy's avatar
      swim: introduce payload · dfc4ce43
      Vladislav Shpilevoy authored
      Payload is arbitrary user data disseminated over the cluster
      along with other member attributes.
      
      Part of #3234
      dfc4ce43
    • Vladislav Shpilevoy's avatar
      swim: rename TTL to TTD · 7df5f63f
      Vladislav Shpilevoy authored
      TTL is time-to-live and it slightly confuses when is said about a
      member's attribute. Status_ttl looks like after this value gets
      0 the status is deleted or is no longer valid.
      
      TTD is more precise definition for these counters and is expanded
      as time-to-disseminate.
      7df5f63f
    • Vladislav Shpilevoy's avatar
      swim: do not rebuild packet meta multiple times · d251efe7
      Vladislav Shpilevoy authored
      Before the patch there were 2 cases when an unchanged packet was
      rebuilt partially on each send:
      
        - cached round message's meta section was rebuilt on each
          EV_WRITE event in swim_scheduler_on_output() function;
      
        - broadcast message's meta section was rebuilt too even though
          its content does not depend on a broadcast interface.
      
      The third case appears with indirect pings patch which aggravates
      meta building business by routing and packet forwarding. When a
      packet needs to be forwarded farther, its meta is built in a
      special manner preserving the route before EV_WRITE appears, and
      on_output should not touch that meta.
      
      This patch adds a check preventing unnecessary meta rebuilds.
      Besides, the check and the meta building code are moved into a
      dedicated function out of swim_scheduler_on_output() - it allows
      to completely split logic of packing a message and sending it.
      Separated logic helps a lot when indirect pings are introduced.
      
      Part of #3234
      d251efe7
    • Vladislav Shpilevoy's avatar
      swim: fix a bug with invalidation of round msg in fly · 7a1a8b1c
      Vladislav Shpilevoy authored
      SWIM works in rounds, each split in steps. On step SWIM sends a
      round message. The message is not changed between steps of one
      round usually, and is cached so as not to rebuild it without
      necessity. But when something changes in one member's attributes,
      or in the member table, the message is invalidated to be rebuilt
      on a next step. Invalidation resets the cached packet.
      
      But it leads to a bug, when a round message is already scheduled
      to be sent, however is not actually sent and invalidated in fly.
      Such a message on a next EV_WRITE event will be sent as an empty
      packet, which obviously makes no sense.
      
      On the other hand it would be harmful to cancel the invalidated
      packet if it is in fly, because during frequent changes the
      instance will not send anything.
      
      There are no a test case, because empty packets does not break
      anything, but still they are useless. And, as it is said above,
      such invalidation would prevent sending any round messages when
      there are lots of updates.
      
      Follow up for cf0ddeb8
      (swim: keep encoded round message cached)
      7a1a8b1c
    • Vladislav Shpilevoy's avatar
      swim: extract binary ip/port into a separate struct · b1c77743
      Vladislav Shpilevoy authored
      At this moment there are two binary structures in the SWIM
      protocol carrying an address: swim_member_passport and
      swim_meta_header_bin - one address in each. This code duplication
      was not formidable enough to stimulate creation of a separate
      address structure.
      
      But forthcoming indirect messages protocol extensions will add 2
      new cases of encoding a binary address. It triggered this patch
      to reduce code duplication.
      
      Part of #3234
      b1c77743
    • Vladislav Shpilevoy's avatar
      swim: move sockaddr_in checkers to swim_proto.h · fbccee1d
      Vladislav Shpilevoy authored
      There are several places where it is necessary to check if a
      sockaddr_in is nullified, and to compare a couple of addresses.
      Some of them are in swim_proto.c, and more are coming in indirect
      SWIM messages patch. The patch moves the checkers into
      swim_proto.h so as to be usable from anywhere in SWIM.
      
      Also minor renames are made alongside. 'sockaddr_in' is too long
      to use in each related function's name, and is replaced with
      'inaddr' by analogue with the standard library.
      
      Part of #3234
      fbccee1d
    • Vladimir Davydov's avatar
      memtx: cancel checkpoint thread at exit · d95608e4
      Vladimir Davydov authored
      If a tarantool instance exits while checkpointing is in progress, the
      memtx checkpoint thread, which writes the snap file, can access already
      freed data resulting in a crash. Let's fix this the same way we did for
      relay and vinyl threads - simply cancel the thread forcefully and wait
      for it to terminate.
      
      Closes #4170
      d95608e4
    • Vladimir Davydov's avatar
      Improve box.stat.net output · 14673a71
      Vladimir Davydov authored
       - Add REQUESTS.current to report the number of requests currently in
         flight, because it's useful for understanding whether we need to
         increase box.cfg.net_msg_max.
       - Add REQUESTS.{rps,total}, because knowing the number of requests
         processed per second can come in handy for performance analysis.
       - Add CONNECTIONS.{rps,total} that show the number of connections
         opened per second and total. Those are not really necessary, but
         without them the output looks kinda lopsided.
      
      Closes #4150
      
      @TarantoolBot document
      Title: Document new box.stat.net fields
      
      Here's the list of the new fields:
      
       - `CONNECTIONS.rps` - number of connections opened per second recently
         (for the last 5 seconds).
       - `CONNECTIONS.total` - total number of connections opened so far.
       - `REQUESTS.current` - number of requests in flight (this is what's
         limited by `box.cfg.net_msg_max`).
       - `REQUESTS.rps` - number of requests processed per second recently
         (for the last 5 seconds).
       - `REQUESTS.total` - total number of requests processed so far.
      
      `CONNECTIONS.rps`, `CONNECTIONS.total`, `REQUESTS.rps`, `REQUESTS.total`
      are reset by `box.stat.reset()`.
      
      Example of the new output:
      ```
      ---
      - SENT:
          total: 5344924
          rps: 840212
        CONNECTIONS:
          current: 60
          rps: 148
          total: 949
        REQUESTS:
          current: 17
          rps: 1936
          total: 12139
        RECEIVED:
          total: 240882
          rps: 38428
      ...
      ```
      14673a71
  6. Apr 17, 2019
  7. Apr 16, 2019
    • Vladimir Davydov's avatar
      vinyl: fix crash if space is dropped while space.get is reading from it · 75f03a50
      Vladimir Davydov authored
      In contrast to vinyl_iterator, vinyl_index_get doesn't take a reference
      to the LSM tree while reading from it. As a result, if the LSM tree is
      dropped in the meantime, vinyl_index_get will crash. Fix this issue by
      surrounding vy_get with vy_lsm_ref/unref.
      
      Closes #4109
      75f03a50
    • Vladimir Davydov's avatar
      vinyl: fix crash during index build · ccd46a27
      Vladimir Davydov authored
      To propagate changes applied to a space while a new index is being
      built, we install an on_replace trigger. In case the on_replace
      trigger callback fails, we abort the DDL operation.
      
      The problem is the trigger may yield, e.g. to check the unique
      constraint of the new index. This opens a time window for the DDL
      operation to complete and clear the trigger. If this happens, the
      trigger will try to access the outdated build context and crash:
      
       | #0  0x558f29cdfbc7 in print_backtrace+9
       | #1  0x558f29bd37db in _ZL12sig_fatal_cbiP9siginfo_tPv+1e7
       | #2  0x7fe24e4ab0e0 in __restore_rt+0
       | #3  0x558f29bfe036 in error_unref+1a
       | #4  0x558f29bfe0d1 in diag_clear+27
       | #5  0x558f29bfe133 in diag_move+1c
       | #6  0x558f29c0a4e2 in vy_build_on_replace+236
       | #7  0x558f29cf3554 in trigger_run+7a
       | #8  0x558f29c7b494 in txn_commit_stmt+125
       | #9  0x558f29c7e22c in box_process_rw+ec
       | #10 0x558f29c81743 in box_process1+8b
       | #11 0x558f29c81d5c in box_upsert+c4
       | #12 0x558f29caf110 in lbox_upsert+131
       | #13 0x558f29cfed97 in lj_BC_FUNCC+34
       | #14 0x558f29d104a4 in lua_pcall+34
       | #15 0x558f29cc7b09 in luaT_call+29
       | #16 0x558f29cc1de5 in lua_fiber_run_f+74
       | #17 0x558f29bd30d8 in _ZL16fiber_cxx_invokePFiP13__va_list_tagES0_+1e
       | #18 0x558f29cdca33 in fiber_loop+41
       | #19 0x558f29e4e8cd in coro_init+4c
      
      To fix this issue, let's recall that when a DDL operation completes,
      all pending transactions that affect the altered space are aborted by
      the space_invalidate callback. So to avoid the crash, we just need to
      bail out early from the on_replace trigger callback if we detect that
      the current transaction has been aborted.
      
      Closes #4152
      ccd46a27
    • Cyrill Gorcunov's avatar
      fiber: Unify sizeof operator · a6b443b0
      Cyrill Gorcunov authored
      We use sizeof as a function in most of the overall code,
      fix this nit.
      a6b443b0
    • Roman Khabibov's avatar
      tarantoolctl: raise error when box.cfg isn't called · 2b387d1c
      Roman Khabibov authored
      Added a check whether box.cfg() is called within an instance
      file. If box.cfg() is missed, point a user the reason of a
      fail explicitly.
      
      Before this commit the error was look so:
      
      /usr/bin/tarantoolctl:541: attempt to index a nil value
      
      Closes #3953
      2b387d1c
  8. Apr 12, 2019
    • Vladislav Shpilevoy's avatar
      test: introduce new SWIM packet filter by component names · a0016971
      Vladislav Shpilevoy authored
      In the next patch on payloads it is wanted to drop only packets
      containing certain sections such as anti-entropy, dissemination.
      New SWIM test transport filters allow to implement this with
      ease.
      
      Part of #3234
      a0016971
    • Vladislav Shpilevoy's avatar
      test: generalize SWIM fake descriptor filters · 6ac68cc4
      Vladislav Shpilevoy authored
      At this moment SWIM test harness implements its own fake file
      descriptor table, which is used unawares by the real SWIM code.
      Each fake fd has send and recv queues, can delay and drop
      packets with a certain probability. But it is going to be not
      enough for new tests.
      
      It is wanted to be able to drop packets with a specified content,
      from and to a specified direction. For that the patch implements
      a filtering mechanism. Each fake fd now has a list of filters,
      applied one by one to each packet. If at least on filter wants to
      drop a packet, then it is dropped. The filters know packet
      content and direction: outgoing or incomming.
      
      Now only one filter exists - drop rate. It existed even before
      the patch, but now it is ported on the new API.
      
      Part of #3234
      6ac68cc4
    • Vladislav Shpilevoy's avatar
      swim: factor out 'update' part of swim_member_upsert() · 1eb82afc
      Vladislav Shpilevoy authored
      Move 'update' logic into a separate function, because in the next
      commits it is going to become more complicated due to payload
      introduction, and it would be undesirable to clog the upsert()
      function with payload-specific code.
      
      Part of #3234
      1eb82afc
    • Vladislav Shpilevoy's avatar
      swim: replace event_bin and member_bin with the passport · 17f895ed
      Vladislav Shpilevoy authored
      Event_bin and member_bin binary packet structures were designed
      separately for different purposes. Initially the event_bin was
      thought having the same fields as passport + optional old UUID +
      optional payload. On the other hand, member_bin was supposed to
      store the passport + mandatory payload.
      
      But old UUID was cut off in favour of another way of UUID update.
      And payload appeared to be optional in both anti-entropy and
      dissemination. It means, that member_bin and event_bin are not
      needed anymore as separate structures. This commit replaces them
      with the passport completely.
      
      Part of #3234
      17f895ed
    • Vladislav Shpilevoy's avatar
      swim: factor out MP_BIN decoding from swim_decode_uuid · 61b0bd5a
      Vladislav Shpilevoy authored
      The new function is swim_decode_bin(), and is going to be used
      to safely decode payloads - arbitrary binary data disseminated
      alongside with all the other SWIM member attributes.
      
      Part of #3234
      61b0bd5a
    • Alexander Turenko's avatar
      net.box: fix 'unique' index flag in net.box schema · f1f6433b
      Alexander Turenko authored
      Before this commit it always returns false.
      
      Fixes #4091.
      f1f6433b
    • Cyrill Gorcunov's avatar
      fiber: Define constants for reserved fids · 4bb7b332
      Cyrill Gorcunov authored
      Opencoded constants are not good for long time
      support, make it named one. Moreover there was
      a typo in comment, fid = 0 is reserved as well.
      4bb7b332
    • Cyrill Gorcunov's avatar
      fiber: Drop unused FIBER_CALL_STACK · 9e7b460c
      Cyrill Gorcunov authored
      The constant is leftover from 08585902
      9e7b460c
    • Serge Petrenko's avatar
      test: rework box/on_shutdown test · c0260529
      Serge Petrenko authored
      The test is flaky under high load (e.g. when is run in parallel with a
      lot of workers). Make it less dependent on arbitrary timeouts to improve
      stability.
      
      Part of #4134
      c0260529
    • Serge Petrenko's avatar
      test: extract on_shutdown tests from box/misc · 70ea9998
      Serge Petrenko authored
      This part of the test is flaky when tests are run in parallel, besides,
      it is quite big on its own, so extract it into a separate file to add
      more flexibility in running tests and to make finding problems easier.
      
      Part of #4134
      70ea9998
    • Nikita Pettik's avatar
      sql: increment rowcount of FK alteration · 3bd13cf5
      Nikita Pettik authored
      Before this patch SQL statement which involves FK constraints creation
      or drop didn't increment rowcount:
      
      box.execute("ALTER TABLE t ADD CONSTRAINT fk1 FOREIGN KEY (b) REFERENCES parent (a);")
      ---
      - rowcount: 0
      ...
      
      This patch fixes this misbehaviour: accidentally VDBE was forgotten to
      enable counting changes during ALTER TABLE ADD/DROP constraint.
      
      Closes #4130
      3bd13cf5
    • Cyrill Gorcunov's avatar
      fiber: Drop redundant memset call · 264beb8b
      Cyrill Gorcunov authored
      When we allocate new fiber we are clearing the whole
      structure right after, so no need to call memset again,
      coro context is already full of zeros.
      
      Note the coro context is close to 1K size and redundat
      memset here is really a penalty.
      264beb8b
Loading