Skip to content
Snippets Groups Projects
  1. Jan 31, 2022
    • Yaroslav Dynnikov's avatar
      refactor: from / into types conversion · 5abf278b
      Yaroslav Dynnikov authored
      1. Trait `From` for `traft::row::Entry` now accepts a value instead of a
         reference in order to avoid unnecessary clones. A caller makes a
         clone itself if necessary.
      
      2. Trait `From` implementation for `traft::Message` now accepts a
         reference instead of a value. Anyway, it uses msgpack under the hood
         and doesn't affect performance.
      Verified
      5abf278b
  2. Jan 28, 2022
  3. Jan 26, 2022
    • Yaroslav Dynnikov's avatar
      chore: reorganize rust modules · 61ea1dfe
      Yaroslav Dynnikov authored
      For ambiguous concepts (such as Entry, Message) use prefix notation instead of suffixes.
      Verified
      61ea1dfe
    • Yaroslav Dynnikov's avatar
      Incapsulate raw raft node · c2d6a43c
      Yaroslav Dynnikov authored
      This patch eliminates raw raft node dereferencing and redundant use of
      `borrow_mut()`.  Instead, `traft::Node` provides a safe API that
      communicates with the raw node through the fiber channel.
      
      Also, functions `node::new` and `node::start` are merged because keeping
      them distinct makes no sense.
      Verified
      c2d6a43c
    • Yaroslav Dynnikov's avatar
      Refactor stash · f7de661b
      Yaroslav Dynnikov authored
      As we recently discovered, Tarantool has a peculiarity - when calling
      stored procedures with `{language = "C"}` option, it disregards the
      shared object (`.so` / `.dylib`) already loaded by Lua and makes the
      second independent `dlopen`. As a result, Lua and C stored procedures
      can't share state, because even static variables point to different
      memory locations.
      
      As a workaround, this patch provides the API for hiding the state inside
      `lua_State`. Under the hood, the stash consumes a custom struct and
      leaks the wrapping box. Inside Lua, it's represented by a userdata,
      which the `access()` function provides access to.
      Verified
      f7de661b
    • Yaroslav Dynnikov's avatar
      chore: code duplication · 795208c1
      Yaroslav Dynnikov authored
      Use publicly available `tarantool::global_lua` instead of the self-made
      implementation.
      Verified
      795208c1
  4. Jan 20, 2022
    • Sergey V's avatar
      refactor: traft Storage · caf78484
      Sergey V authored and Yaroslav Dynnikov's avatar Yaroslav Dynnikov committed
      caf78484
    • Yaroslav Dynnikov's avatar
      feature: run inner tests with cargo · 404f7851
      Yaroslav Dynnikov authored
      Tarantool specificities make it difficult to set up usual rust tests.
      Picolib is coupled with tarantool symbols and compiled as a dylib, so
      it can't be linked to a stand-alone binary.
      
      This patch introduces another way of testing.
      
      All tests (called inner) are already built into dylib and exposed in
      the tarantool console:
      
      ```
      tarantool> picolib.test
      ---
      - test_version: 'function: 0x41f32400'
        test_traft_storage_RaftEntryRow: 'function: 0x41f32550'
      ...
      ```
      
      The new integration test `inner.rs` iterates over them and runs each
      one in a separate tarantool instance.
      
      See also: commit 6610e5cb
      404f7851
    • Sergey V's avatar
      refactoring: move picolib::Message · aa3d29ad
      Sergey V authored and Yaroslav Dynnikov's avatar Yaroslav Dynnikov committed
      Originally it was `picolib::traft::storage::Message`.
      Now it's simply `picolib::Message`.
      aa3d29ad
  5. Jan 19, 2022
  6. Jan 18, 2022
  7. Jan 17, 2022
  8. Dec 28, 2021
  9. Dec 24, 2021
  10. Dec 20, 2021
  11. Dec 14, 2021
  12. Dec 13, 2021
  13. Dec 07, 2021
  14. Dec 03, 2021
  15. Nov 29, 2021
  16. Nov 23, 2021
    • Yaroslav Dynnikov's avatar
      Parse command line arguments · 49eecfa1
      Yaroslav Dynnikov authored
      The control flow of picodata looks as following:
      
      Picodata binary -> exec tarantool -l picodata -> libpicodata.so -> ...
      
      Since the libpicodata is a shared lib loaded by tarantool, we can't pass
      it arguments as usual. At first, tarantool parses them by itself and
      rejects uknown arguments. Secondly, it spoils argv array.
      
      To overcome these two issues, this patch introduces argparse on behalf
      of the picodata binary, and puts parsed values into the environment
      variables.
      
      P.S. Thihs is how command line args look from within libpicodata:
      
      ```console
      $ tarantool -l picodata /dev/null --opt1 foo --opt2 bar
      Hello from rust lib
      arg[0] tarantool
      arg[1] /dev/null
      arg[2] --opt1
      arg[3] foo
      arg[4] --opt2
      arg[5] bar
      arg[6] --opt2
      arg[7] bar
      ```
      49eecfa1
Loading