1. 05 Dec, 2019 4 commits
  2. 04 Dec, 2019 12 commits
    • Yedidya Feldblum's avatar
      Let ElfFile open functions take Options · 4462a7f0
      Yedidya Feldblum authored
      Summary:
      [Folly] Let `ElfFile` open functions take a single builder-style composite `Options` argument v.s. taking a sequence of individual arguments one for each option.
      
      Right now there is only one option but it is possible to add more in the future.
      
      While here, rename and invert `readOnly` to `writable`.
      
      Reviewed By: vitaut
      
      Differential Revision: D18740699
      
      fbshipit-source-id: 6fb016f731bf46a1b4ac6b2efcea739f6261818a
      4462a7f0
    • Andrii Grynenko's avatar
      MasterPtr · 8871fd42
      Andrii Grynenko authored
      Summary: Shared-ptr, which should be explicitly joined and waits for all other instances to be destroyed.
      
      Reviewed By: spalamarchuk
      
      Differential Revision: D18696536
      
      fbshipit-source-id: 9d7b0b960a00095be7df033680c7a116c358637c
      8871fd42
    • Yedidya Feldblum's avatar
      Let co_invoke be a CPO · fac0cb2b
      Yedidya Feldblum authored
      Summary: [Folly] Implement `co_invoke` as a generic CPO with customizations found via ADL.
      
      Reviewed By: lewissbaker
      
      Differential Revision: D18753006
      
      fbshipit-source-id: 16239f0bd6140f56bd23effbf092f2b8279c1350
      fac0cb2b
    • Subodh Iyengar's avatar
      use recvmsg on client · d4446668
      Subodh Iyengar authored
      Summary:
      Use the new recvmsg api on the client to receive a packet
      from AsyncUDPSocket
      
      Reviewed By: mjoras
      
      Differential Revision: D18797963
      
      fbshipit-source-id: 319d5c41f3a868e7b78947fdbcf2c411b6d7fbf0
      d4446668
    • Subodh Iyengar's avatar
      Add notification read callbacks to AsyncUDPSocket · a3af6255
      Subodh Iyengar authored
      Summary:
      Add a mode to read callback which only notifies but does not call getReadBuffer.
      
      This also adds a readmsg api for notification callbacks to invoke
      
      This is useful for callbacks that want to perform their own logic of reading from the socket, for example
      a callback might want to perform multiple read calls per callback to save on CPU of epoll
      
      Differential Revision: D18797964
      
      fbshipit-source-id: 86bf1553078a20ea16f56f0c404887fca5050065
      a3af6255
    • Dan Melnic's avatar
      Add support for multiple EventBase backends · e0a9c732
      Dan Melnic authored
      Summary: Add support for multiple EventBase backends
      
      Reviewed By: simpkins, mjoras
      
      Differential Revision: D16157574
      
      fbshipit-source-id: 915c3f08cac5673b5c4ca52a661b41b8a228df75
      e0a9c732
    • Michael Lee (Engineering)'s avatar
      Add @manual annotation to bsd header · c0e397b2
      Michael Lee (Engineering) authored
      Summary: Mark the header as it is not a header provided by folly
      
      Reviewed By: yfeldblum
      
      Differential Revision: D18800770
      
      fbshipit-source-id: 95c9dcdeb6f4b745f0bce859e4d9669c009c353a
      c0e397b2
    • Swaroop Manjunath's avatar
      Populate skip pointers up to universe upper bound instead of last value. · 02784cf2
      Swaroop Manjunath authored
      Summary:
      This diff introduces the following changes:
      
      - EliasFano encoding populates all skip pointers between last value and the universeUpperBound.
      
      Reviewed By: ot, philippv
      
      Differential Revision: D18734361
      
      fbshipit-source-id: 2451614ff99dca22f0247cb572542f8cadc97b6f
      02784cf2
    • Lukas Piatkowski's avatar
      rust-shed: change the workspace member definition to point to the newly moved project directories · 2b647dff
      Lukas Piatkowski authored
      Summary: The projects have been moved to a "shed/" subdirectory, so the root Cargo.toml with workspace has to be adjusted to that move.
      
      Reviewed By: farnz
      
      Differential Revision: D18807189
      
      fbshipit-source-id: 0fd66fa7edd38ab4fdf905872f38fac57ae0230e
      2b647dff
    • Adam Simpkins's avatar
      getdeps: add an install_fb_python_executable() function to the CMake utilities · 7d9a4c55
      Adam Simpkins authored
      Summary:
      Add a `install_fb_python_executable()` function to `FBPythonBinary.cmake` for
      helping to install python executables generated with
      `add_fb_python_executable()`.  This primarily helps by automatically looking
      up the correct output file to install from the generated targets.
      
      Reviewed By: wez
      
      Differential Revision: D18774539
      
      fbshipit-source-id: 4b397580d72ac448f21d1db6d2cdd653cf3635df
      7d9a4c55
    • Orvid King's avatar
      Remove dead includes in folly/gen · f47108d3
      Orvid King authored
      Reviewed By: yfeldblum
      
      Differential Revision: D18780743
      
      fbshipit-source-id: 5b26163f5dabcb14fd9ad7b4d9489d3ca1f6df0d
      f47108d3
    • Maged Michael's avatar
      Request context: Add hazard pointer-based implementation · 6472b9cb
      Maged Michael authored
      Summary:
      Add hazard-pointer-based implementation to allow concurrent reading during updates. This is done by using lightweight concurrent structures protected by hazard pointers instead of sequential structures protected by read locks.
      
      The implementation is gated by a gflag that is off by default.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D18622072
      
      fbshipit-source-id: 120ba14a7a559883e64a3fdf81b35a26315312c1
      6472b9cb
  3. 03 Dec, 2019 14 commits
    • Wez Furlong's avatar
      getdeps: rocksdb: don't enable -Werror · 1cb1d800
      Wez Furlong authored
      Summary:
      It's impossible for a consumer of a released version of
      rocksdb to do anything about this except not use it, and this particular
      version of rocksdb ships with a number of shadow warnings.
      
      Disable warning to error promotion.
      
      See also: https://twitter.com/pcwalton/status/1201679307552083968
      
      Reviewed By: chadaustin
      
      Differential Revision: D18785637
      
      fbshipit-source-id: 1db2b00b3c397d6c0b8f05b9d1c658877685c961
      1cb1d800
    • Julien Verlaguet's avatar
      Update README.md (#1268) · 10191f96
      Julien Verlaguet authored
      Summary:
      I tried building on a fresh docker image ubuntu:16.04, the current setup doesn't work because libunwind-dev is missing. Adding this fixed the problem for me.
      Pull Request resolved: https://github.com/facebook/folly/pull/1268
      
      Reviewed By: Orvid
      
      Differential Revision: D18759832
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 8a861844e0b4687bf0107553274322954fdc1c00
      10191f96
    • Igor Sugak's avatar
      add FOLLY_SANITIZE_MEMORY macro · e8887cf1
      Igor Sugak authored
      Summary: Similar to other sanitizer macros add one for memory sanitizer.
      
      Reviewed By: pixelb
      
      Differential Revision: D18662903
      
      fbshipit-source-id: aa62dfedbfd1b174403af451e14ace9896b26466
      e8887cf1
    • Ahmed Soliman's avatar
      Add building bdist_wheel as part of the python build for folly · 2501b652
      Ahmed Soliman authored
      Summary: As per title
      
      Reviewed By: MohamedBassem
      
      Differential Revision: D18781525
      
      fbshipit-source-id: a23d8207bd3776b55ba42ec87598a0a9375848aa
      2501b652
    • Eric Niebler's avatar
      Don't cast function call result to void as it can hide nodiscard warnings · bdc1476f
      Eric Niebler authored
      Summary:
      When assigning a function whose return type is marked `nodiscard` to a `Function<void(Args...)>`, the fact that we are internally explicitly casting the result of the function call to `void` hides the `nodiscard` warning.
      
      For instance:
      
      ```
      struct [[nodiscard]] DoNotIgnore {};
      Function<void()> fn = [] { return DoNotIgnore{}; };
      ```
      
      emits no warnings, and when `fn()` is invoked, the `DoNotIgnore` struct gets silently ignored.
      
      This diff causes the warning to be emitted.
      
      It is only enabled on compilers that support `if constexpr`. It could be supported on more compilers at the cost of one or more of the following:
      
      * extra template instantiations
      * an additional function dispatch
      * SFINAE
      * Spamming out 4 more specializations of the `FunctionTraits` template.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D18668177
      
      fbshipit-source-id: 0a2cd1366855a0582ab27bb157998d3a4bf4e5a0
      bdc1476f
    • Alex Chow's avatar
      Add SSLContext constructor to directly wrap an SSL_CTX* · eaeaa1fa
      Alex Chow authored
      Summary: Provides a way to transition to folly::AsyncSSLSocket for applications that manage their own SSL_CTX
      
      Reviewed By: yfeldblum
      
      Differential Revision: D18625198
      
      fbshipit-source-id: cae8c531203134bbb27b648f3f92a6794b14ea3c
      eaeaa1fa
    • Shrikrishna Khare's avatar
      fbcode_builder: getdeps: fboss: OpenBCM depends on git-lfs · b0ec3021
      Shrikrishna Khare authored
      Summary:
      OpenBCM libraries are stored with git LFS. As a result, fetcher fetches LFS pointers and not the contents. Use git-lfs to pull the real contents before copying to install dir using NoopBuilder.
      In future, if more builders require git-lfs, we would consider installing
      git-lfs as part of the sandcastle infra as against repeating similar
       logic for each builder that requires git-lfs.
      
      Reviewed By: wez
      
      Differential Revision: D18759806
      
      fbshipit-source-id: f988a0460107bc0685e7aba107daba9ed88f71e7
      b0ec3021
    • Shrikrishna Khare's avatar
      fbcode_builder: getdeps: fboss: add git-lfs fetcher · bbe672fe
      Shrikrishna Khare authored
      Summary:
      As titled. This is needed by OpenBCM, and in future, possibly by other
      manifests as well.
      
      Reviewed By: wez
      
      Differential Revision: D18759807
      
      fbshipit-source-id: d445dfa382cea4bf96443ab9889926a4abbf0757
      bbe672fe
    • Matt Ma's avatar
      folly/experimental/symbolizer: symbolize inlined functions · 380c720b
      Matt Ma authored
      Summary:
      The previous approach (D16760775) reserved space for inlined function info in each `SymbolizedFrame`.
      
      ```
      struct SymbolizedFrame {
        Dwarf::LocationInfo location;
        Dwarf::LocationInfo inlineLocations[Dwarf::kMaxLocationInfoPerFrame];
        ...
      ```
      
      That increased the size of `SymbolizedFrame` and `FrameArray` and lead to stack overflow in some already deep stacks.
      ```
      template <size_t N>
      struct FrameArray {
        FrameArray() {}
      
        size_t frameCount = 0;
        uintptr_t addresses[N];
        SymbolizedFrame frames[N];
      };
      ```
      
      To avoid allocate more space on stack, changed to use extra frames to store inline calls:
      - Usually the callers allocate `FrameArray<100>` frames, but the stack trace is usually smaller than 100
      - Use the unused slots to fill in inlined function info:
       -- each function gets at most `kMaxLocationInfoPerFrame` (currently 3) inlined entries
       -- when the available buffer fills up no more inlined functions are filled in.
      
      To find the inline calling stack, we need first need to find the subprogram Debug Info Entry (with tag DW_TAG_subprogram) with the given address, then recursively find all the inline subroutines (with tag DW_TAG_inlined_subroutine) in the call stack. Sadly debug info has no index we can use for jump, and a linear search over debug info entries (and their attributes) is needed during the process, which would cause performance regression.
      
      ```
      buck run mode/opt folly/experimental/symbolizer/test:dwarf_benchmark -- --benchmark
      
      ============================================================================
      folly/experimental/symbolizer/test/DwarfBenchmark.cpprelative  time/iter  iters/s
      ============================================================================
      DwarfFindAddressFast                                         4.03us  248.36K
      DwarfFindAddressFull                                         4.03us  248.18K
      DwarfFindAddressFullWithInline                             293.23us    3.41K
      ============================================================================
      ```
      
      Reviewed By: luciang
      
      Differential Revision: D17586385
      
      fbshipit-source-id: 1b84b3f3a576573ce24092b433a501a3bdf76be0
      380c720b
    • Woo Xie's avatar
      expose the underlying AsyncUDPSocket in AsyncUDPServerSocket · e4d37c6c
      Woo Xie authored
      Summary: users may need AsyncUDPSocket to send back datagram to clients.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D18764100
      
      fbshipit-source-id: 7ab7cce5711f47db92f43a68b94568729d5746d0
      e4d37c6c
    • Dan Melnic's avatar
      Workaround for something that looks like a compiler bug · 506ab28c
      Dan Melnic authored
      Summary: Workaround for something that looks like a compiler bug
      
      Reviewed By: kevin-vigor
      
      Differential Revision: D18700404
      
      fbshipit-source-id: 6d9c9a40e9e468ee910c5456bcbfdf02c1b1c59a
      506ab28c
    • Andrew Gallagher's avatar
      folly/container/detail/F14Table.h: add missing `<emmintrin.h>` header · 8a6095a5
      Andrew Gallagher authored
      Summary:
      This is the header which provides `_mm_set1_epi8`
      (https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_set1_epi8).
      
      Although this header is transitively found via other headers (which is why this
      isn't a build failure), without this explicit include IWYU's heursitics around
      template functions wrongly assume that this header should be provided by
      downstream includers of this header.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D18753275
      
      fbshipit-source-id: 7d6ee934542867f2d1e84d40397f48ea8146facc
      8a6095a5
    • Nitin Garg's avatar
      Ensure recyle is done only once in IndexedMemPool.h · 85b4ece6
      Nitin Garg authored
      Summary:
      localPush invoked in recycleIndex can end up looping more than once if it has to retry the update of head. When that happens, the onRecycle call will be made again which will call destructor on the object again if eagerRecycle is true.
      
      Fixed it by making sure only the 1st pass of the loop will call onRecycle.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: nbronson
      
      Differential Revision: D18752349
      
      fbshipit-source-id: 27dcb5c7840f724bbd39f4dc0176e21095a22284
      85b4ece6
    • Taylor Hopper's avatar
      Add default constructor to RecordIOReader::Iterator · c5269bb3
      Taylor Hopper authored
      Summary: For this iterator to satisfy the `input_or_output_iterator` concept in range-v3, it must also satisfy the `semiregular` concept, which requires a default constructor.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D18689298
      
      fbshipit-source-id: a38cde0041ceba1aac79128d428df05ee0f00ab4
      c5269bb3
  4. 02 Dec, 2019 1 commit
    • Ahmed Soliman's avatar
      Install wheel and cython on fbcode_builder venv environments · 19eadc88
      Ahmed Soliman authored
      Summary:
      This is an update to the fbcode_builder codebase to allow setting up the python virtualenv with python dependencies installed. I've included wheel and cython (with a pinned version to 0.28.6 which is the only version that works with thriftpy3 at the moment, due to https://github.com/cython/cython/issues/2985) as standard packages since these are required by some of our top-level dependencies (folly and thrift)
      
      As far as I know, there are no other projects that use PYTHON_VENV at the moment except LogDevice so the impact should be minimal.
      
      Reviewed By: lucaspmelo
      
      Differential Revision: D18758383
      
      fbshipit-source-id: 264941311c5e3a19dc4ef2bb78c9a1baa34dfd8c
      19eadc88
  5. 01 Dec, 2019 1 commit
  6. 30 Nov, 2019 1 commit
    • Yedidya Feldblum's avatar
      More direct overload resolution control in folly::coro::concat · 22d18f0b
      Yedidya Feldblum authored
      Summary: [Folly] More direct overload resolution control in `folly::coro::concat`. Just name the type directly rather than using SFINAE, when the SFINAE would just name the type directly in a more roundabout way.
      
      Differential Revision: D18746633
      
      fbshipit-source-id: 6da909834b511426b1cf7bbda0fd7643b5761f14
      22d18f0b
  7. 29 Nov, 2019 7 commits
    • Ahmed Soliman's avatar
      Fixing fbthrift and folly cython bindings build · b1211e4c
      Ahmed Soliman authored
      Summary:
      This diff addresses a collection of issues with our thrift-py3 build story in open source.
      - Cython 0.29 bug https://github.com/cython/cython/issues/2985 prevents us from loading the generated binary python extensions. I've tested 0.28.6 and it works perfectly.
      - Adds ssl to the extensions (since we need SSLContext in get_client, we must have access to the module)
      - No need to special case folly_pic. There is really no easy way to get the python bindings to work without using shared library libfolly.so. So, In our build (logdevice) we will build folly as a shared library, this also reduces the complexity everywhere.
      - We also need iobuf as extension for thrift to work, added that to setup.py
      - Refactored some of the CMake code that had hardcoded file names to use globbing to future-proof this as much as possible.
      - Moved `python/lang/cast.pxd` to match the python module name `folly.cast`, so now it lives in `python/cast.pxd`. This simplifies the globbing as well.
      - Moved `setup.py` to live in the `/python` directory.
      - Added `*.py` in setup.py to pickup any raw python code (including `__init__.py`)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D18685009
      
      fbshipit-source-id: 749b30942a3e5e9e314b5248cc0aa90c6ac1581f
      b1211e4c
    • Ahmed Soliman's avatar
      Move optional python extensions from fbthrift to folly and add missing pyx files to thrift · 9657632b
      Ahmed Soliman authored
      Summary: This is another step of moving the python extensions for folly that are currently defined in thrift's codebase. Another step for getting us closer on unblocking LogDevice to use the python3 thrift client in open-source.
      
      Reviewed By: yfeldblum, vitaut
      
      Differential Revision: D16221352
      
      fbshipit-source-id: bc24fce073d67397f20f28f79c68512444704402
      9657632b
    • Lukas Piatkowski's avatar
      rust-shed: unify Cargo.toml definitions · f2a70ca9
      Lukas Piatkowski authored
      Reviewed By: farnz
      
      Differential Revision: D18726052
      
      fbshipit-source-id: 4f18430342ab6fd4fc82cc7d03e21f3e50e0ce25
      f2a70ca9
    • Yedidya Feldblum's avatar
      Avoid linear recursion in folly::coro::concat · 7b8d4986
      Yedidya Feldblum authored
      Summary: [Folly] Avoid linear recursion in `folly::coro::concat`.
      
      Reviewed By: kirkshoop
      
      Differential Revision: D18746601
      
      fbshipit-source-id: a383715bfc47ae8c0d4baad8799e98699c7cc14f
      7b8d4986
    • Yedidya Feldblum's avatar
      Remove remnants of replacing std::string · 30fa5801
      Yedidya Feldblum authored
      Summary: [Folly] Remove remnants of replacing `std::string` with the implementation of `folly::fbstring`.
      
      Reviewed By: luciang
      
      Differential Revision: D18738367
      
      fbshipit-source-id: b57d38100c9da38c6351145979ac6d2f677ba817
      30fa5801
    • Yedidya Feldblum's avatar
      No unnecessary SFINAE in ElfFile::at · 9b7cf53d
      Yedidya Feldblum authored
      Summary: [Folly] No unnecessary SFINAE in `ElfFile::at` - just use an explicit `static_assert` directly, rather than relying on overload resolution failure for the same goal.
      
      Reviewed By: luciang
      
      Differential Revision: D18746254
      
      fbshipit-source-id: 4bb209bf3f563f2425e4532f6553e66856cb9bbb
      9b7cf53d
    • Yedidya Feldblum's avatar
      try_call_once, a nothrow variant of call_once · 4b6ebaeb
      Yedidya Feldblum authored
      Summary: [Folly] `try_call_once`, a nothrow variant of `call_once`. Takes a `noexcept` function which returns `bool`; the function returning `false` indicates failure and that the `once_flag` is not to be marked as as set, while the function returning `true` indicates success and that the `once_flag` is to be marked as set.
      
      Reviewed By: andriigrynenko, luciang
      
      Differential Revision: D18742590
      
      fbshipit-source-id: 3b3a6fab9a328f7540cc6fee1452a0f1367b6e0f
      4b6ebaeb