Skip to content
Snippets Groups Projects
  1. Feb 07, 2022
  2. Dec 06, 2021
  3. Sep 21, 2021
  4. Sep 13, 2021
    • Florian Fischer's avatar
      [io/tests] use our own ASSERT macro unaffected by NDEBUG · 9fdc6e1a
      Florian Fischer authored
      This allows use to remove the current hack that the test are always
      build without NDEBUG regardless of the meson buildtype.
      
      Which is fact fixes the failing io tests in release builds.
      Because Future.hpp and Future.cpp see the same version of NDEBUG.
      9fdc6e1a
  5. Aug 19, 2021
  6. Feb 26, 2021
    • Florian Fischer's avatar
      [meson] better propagate dependencies · 2d0b5f6b
      Florian Fischer authored
      The emper header LockedUnboundedQueue.hpp could depend on different libraries
      according to the implementation.
      
      To link those dependencies with everything including LockedUnboundedQueue.hpp
      we propagate all emper_dependencies through emper_dep.
      
      And using emper_dep as a dependency seems anyway better than essentially
      writing down emper_dep manually each time.
      
      emper_dep essentially is:
      (link_with:emper, include_directories: emper_all_include)
      2d0b5f6b
  7. Feb 03, 2021
    • Florian Fischer's avatar
      improve networking code · f4884683
      Florian Fischer authored
      Use getaddrinfo instead to get the socket information instead of
      using always ipv4 sockets.
      Pass host and port as strings for use with getaddrinfo.
      f4884683
  8. Jan 29, 2021
  9. Jan 26, 2021
    • Florian Fischer's avatar
      [IO] introduce emper::io a IO subsystem using io_uring · 460c2f05
      Florian Fischer authored
      Empers IO design is based on a proactor pattern where each worker
      can issue IO requests through its exclusive IoContext object which wraps an
      io_uring instance.
      
      IO completions are reaped at 4 places:
      1. After a submit to collect inline completions
      2. Before dispatching a new Fiber
      3. When no new IO can be submitted because the completion queue is full
      4. And by a global completer thread which gets notified about completions
         on worker IoContexts through registered eventfds
      
      All IO requests are modeled as Future objects which can be either
      instantiated and submitted manually, retrieved by POSIX-like non-blocking
      or implicitly used by posix-like blocking functions.
      
      User facing API is exported in the following headers:
      * emper/io.hpp (POSIX-like)
      * emper.h (POSIX-like)
      * emper/io/Future.hpp
      
      Catching short write/reads/sends and resubmitting the request without
      unblocking the Fiber is supported.
      
      Using AlarmFuture objects Fibers have a emper-native way to sleep for
      a given time.
      
      IO request timeouts with TimeoutWrapper class.
      Request Cancellation is supported with Future::cancel() or the
      CancelWrapper() Future class.
      
      A proactor design demands that buffers are committed to the kernel
      as long as the request is active. To guaranty memory safety Futures
      get canceled in their Destructor which will only return after the committed
      memory is free to use.
      
      Linking Futures to chains is supported using the Future::SetDependency()
      method. Future are submitted when their last Future gets submitted.
      A linked Request will start if the previous has finished.
      Error or partial completions will cancel the not started tail of a chain.
      
      TODO: Handle possible situations where the CQ of the global completer is full
      and no more sqe can be submitted to the SQ.
      460c2f05
Loading