1. 22 Mar, 2019 2 commits
    • Yedidya Feldblum's avatar
      Benchmark for UnboundedBlockingQueue · 028e81b5
      Yedidya Feldblum authored
      Summary: [Folly] Benchmark for `UnboundedBlockingQueue`, starting with measuring contention of `take()`.
      
      Reviewed By: magedm
      
      Differential Revision: D14537953
      
      fbshipit-source-id: ddbba705787b39377f94ad0d63e85038305116cc
      028e81b5
    • Lewis Baker's avatar
      Add folly::coro::AsyncGenerator<T> · a0d2309a
      Lewis Baker authored
      Summary:
      The AsyncGenerator<T> class allows you to write a coroutine that asynchronously produces a sequence of values of type T.
      
      This has the same executor-affinity behaviour for co_await as for Task<T> except that the executor can change at co_yield points to inherit the executor from the consumer each time a new value is requested.
      
      Reviewed By: ericniebler
      
      Differential Revision: D14446089
      
      fbshipit-source-id: 710ad922918a135e1fe6eef853410c9a77cc2c28
      a0d2309a
  2. 21 Mar, 2019 3 commits
    • Wez Furlong's avatar
      fbcode_builder: teach it to build folly on macos · 49a8f35d
      Wez Furlong authored
      Summary:
      This diff expands fbcode_builder so that it can optionally spawn a macos lego job to run a build.
      
      I've pulled in the macOS third party dependencies used by the watchman and eden builds to support this.
      Longer term I want to move to a more granular solution for the third party deps.  Medium term we can move the logic for managing these deps to somewhere more central than just the watchman code.
      
      In the linux flavor of fbcode builder, the setup step is responsible for installing system packages, so I've inserted the LFS download of the macOS deps into that stage.
      
      In order for those macOS deps to be picked up without modifying the folly cmake we need to adjust the environment so this diff also inserts that logic at the top of each generated sandcastle step.
      
      A similar technique could potentially be used for windows builds, but note that fbcode_builder makes some assumptions about linux and requires that bash be available.  Cygwin vs. native paths passed through the environment may be a real concern.  That is something for a follow up diff.
      
      Reviewed By: simpkins
      
      Differential Revision: D14514601
      
      fbshipit-source-id: c2882f45aa4b910b5e65ce6b246c750d20ca2948
      49a8f35d
    • Yedidya Feldblum's avatar
      Fix up fiber-related guards in futures code · f8ae7092
      Yedidya Feldblum authored
      Summary:
      [Folly] Fix up fiber-related guards in futures code. Because of cyclic `#include`s the preprocessor symbol definition must be moved.
      
      Fixes #1061.
      
      Reviewed By: wez, andriigrynenko
      
      Differential Revision: D14555070
      
      fbshipit-source-id: 5e4966fc0f98351924c00a459cc2d8893df4b368
      f8ae7092
    • Andrii Grynenko's avatar
      Update README · 08f846dc
      Andrii Grynenko authored
      Reviewed By: lewissbaker
      
      Differential Revision: D14554480
      
      fbshipit-source-id: 1aea2bf01d69550d0cdb68fc61d22b2c0e42664e
      08f846dc
  3. 20 Mar, 2019 4 commits
    • Eric Niebler's avatar
      executor wrappers don't take extra schedule parameters · 1a1bb9d7
      Eric Niebler authored
      Summary: The type-erasing executor wrappers and the generic executor wrappers accept extra parameters to their `schedule` member functions, but nowhere is that functionality used, and such executor types would fail to satisfy the Executor concepts anyway. Remove that functionality.
      
      Reviewed By: kirkshoop
      
      Differential Revision: D14541290
      
      fbshipit-source-id: 8cf0fd7bdc6dea72e43d5decc9e70ba843ab2db8
      1a1bb9d7
    • Joe Loser's avatar
      Fix bootstrap-osx-homebrew.sh to work with CMake builds (#1041) · 38694971
      Joe Loser authored
      Summary:
      - The `bootstrap-osx-homebrew.sh` script is out of date. It previously
        worked when Folly used Autotools, but was not updated when CMake
        replaced Autotools for the build system.
      - Update dependencies to install.
      - Do not export environment variables when it is not needed; simply pass the
        defines needed directly to the `cmake` invocation.
      - Update `README.md` to specify correct dependencies with CMake build
        for both Homebrew and Macports.
      
      Closes #1038
      Pull Request resolved: https://github.com/facebook/folly/pull/1041
      
      Reviewed By: yfeldblum
      
      Differential Revision: D14293767
      
      Pulled By: calebmarchent
      
      fbshipit-source-id: 4c53fa105e009090c80690eca8beb5a8c1491a48
      38694971
    • Caleb Marchent's avatar
      New folly_test_util library for functions used by other projects (#1071) · 4b05ef50
      Caleb Marchent authored
      Summary:
      LogDevice uses DeterministicSchedule and JsonTestUtil from Folly make
      these available in the installed library targets so that LogDevice can
      compile against installed folly rather than referencing sources
      directly.
      Pull Request resolved: https://github.com/facebook/folly/pull/1071
      
      Reviewed By: yfeldblum
      
      Differential Revision: D14531954
      
      Pulled By: calebmarchent
      
      fbshipit-source-id: 9bd343210451ad6b2e171c6ddddb7d8677fa6290
      4b05ef50
    • Rob Sherwood's avatar
      Tweak the OSS gflags dependency inference logic · 5357c117
      Rob Sherwood authored
      Summary:
      The current logic for "which gflags library should we use" checks for
      the first library (e.g., libgflags vs. libgflags-shared) listed as a TARGET.
      Unfortunately, on some number of systems, the gflags-config.cmake (read:
      the file that is supposed to tell you how to use gflags with cmake) actually
      defines (but doesn't use!) libraries that don't exist (!) so this logic breaks.
      
      Instead, use the system defined gflags_LIBRARIES variable which explicitly
      tells us which library to use.
      
      Reviewed By: yfeldblum, simpkins
      
      Differential Revision: D14512966
      
      fbshipit-source-id: add4ecf6bade502b2d12aad2bdfcf0476eeba465
      5357c117
  4. 19 Mar, 2019 6 commits
    • Yedidya Feldblum's avatar
      Fix odd UserMetric design in folly/Benchmark.h · 65fa2c4b
      Yedidya Feldblum authored
      Summary: [Folly] Fix odd `UserMetric` design in `folly/Benchmark.h`.
      
      Reviewed By: phoad
      
      Differential Revision: D14494202
      
      fbshipit-source-id: c1be1d9b5bdfe07677713ef00401c85270bbe627
      65fa2c4b
    • Lewis Baker's avatar
      Add variadic folly::coro::collectAlll() and collectAllTry() · 3874d423
      Lewis Baker authored
      Summary:
      Adds two new functions to folly::coro for concurrently awaiting a fixed number of sub-tasks.
      
      * `folly::coro::collectAll(tasks...)`
      * `folly::coro::collectAllTry(tasks...)`
      
      Both can be used to concurrently await multiple input tasks. The difference is in how they report the results.
      
      `collectAll()` produces a tuple of the result values for each of the input operations. If any of the input operations fails with an exception then the whole operation fails with an exception (which one is unspecified) any successful results are discarded.
      
      `collectAllTry()` produces a tuple of `Try<T>` objects regardless of whether any of the input operations failed with an exception. The individual result objects can then be queried for the success/failure, allowing the caller to handle partial failure and/or determine which operation(s) failed.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D14334714
      
      fbshipit-source-id: 22eb51e2198be42e77677a066bfbc15e1c7eb7dd
      3874d423
    • deryck's avatar
      moved FOLLY_HAVE_SENDMMSG to FollyConfigChecks.cmake for issue #1011 (#1053) · 4fe39e0f
      deryck authored
      Summary:
      Compile error on Linux 2.6.32-754.6.3.el6.x86_64 /gcc 7.4/NetOps.cpp (issue #1011)
      Pull Request resolved: https://github.com/facebook/folly/pull/1053
      
      Reviewed By: Orvid
      
      Differential Revision: D14454590
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 9c4dccfa30291dd0fb830cc2417c17568ae4fde3
      4fe39e0f
    • Matthieu Martin's avatar
      Provide executor getter for ExecutorLoopController · 7e962169
      Matthieu Martin authored
      Summary: This change enables to acquire the executor from the current FiberManager when using ExecutorLoopController (which is already possible to do with the EventBase's loop controller).
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D14515799
      
      fbshipit-source-id: 3b9e48450bf58ea94bebab50dbbcfd7720f90d61
      7e962169
    • Joe Loser's avatar
      Set CMake policy CMP0075 to respect CMAKE_REQUIRED_LIBRARIES (#1066) · 20572588
      Joe Loser authored
      Summary:
      - For CMake 3.12 and above, CMP0075 is available which allows the macro
        `check_include_file`, `check_include_files`, and `check_include_files_cxx`
        to prefer to link the check executable to the libraries listed in the
        `CMAKE_REQUIRED_LIBRARIES` variable.
      - For CMake 3.13.4, not having this policy set results in a warning such
        as the one below.
      
      ```
      CMake Warning (dev) at /usr/local/Cellar/cmake/3.14.0/share/cmake/Modules/CheckIncludeFileCXX.cmake:79 (message):
        Policy CMP0075 is not set: Include file check macros honor
        CMAKE_REQUIRED_LIBRARIES.  Run "cmake --help-policy CMP0075" for policy
        details.  Use the cmake_policy command to set the policy and suppress this
        warning.
      
        CMAKE_REQUIRED_LIBRARIES is set to:
      
          Threads::Threads;gflags_shared;/usr/lib/libssl.dylib;/usr/local/Cellar/openssl/1.0.2q/lib/libcrypto.dylib
      
        For compatibility with CMake 3.11 and below this check is ignoring it.
      Call Stack (most recent call first):
        CMake/folly-deps.cmake:144 (CHECK_INCLUDE_FILE_CXX)
        CMakeLists.txt:90 (include)
      This warning is for project developers.  Use -Wno-dev to suppress it.
      ```
      
      - This patch sets the policy to the new behavior which means we will
        honor `CMAKE_REQUIRED_LIBRARIES` in the include file check macros now.
      - The warning is now gone for those using CMake 3.13.4 or later.
      Pull Request resolved: https://github.com/facebook/folly/pull/1066
      
      Reviewed By: Orvid
      
      Differential Revision: D14500811
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 767bafbc6e15099a85cd0a5556e7f50f7c4fd0eb
      20572588
    • Steven Peters's avatar
      Fix macOS 10.14 build: compile hash/detail files with -mpclmul (#1067) · c3c0dbe1
      Steven Peters authored
      Summary:
      The macOS 10.14 build is failing in homebrew with some compilation errors in the hash/detail files:
      
      * https://github.com/Homebrew/homebrew-core/pull/37954
      * https://jenkins.brew.sh/job/Homebrew%20Core%20Pull%20Requests/39386/version=mojave/testReport/junit/brew-test-bot/mojave/install___build_bottle_folly/
      * https://github.com/Homebrew/homebrew-core/pull/35982
      
      ~~~
      /tmp/folly-20190114-14797-1m0rah5/folly-2019.01.07.00/folly/hash/detail/ChecksumDetail.cpp:181:28:
       error: '__builtin_ia32_pclmulqdq128' needs target feature pclmul
          y0 = _mm_xor_si128(y0, _mm_clmulepi64_si128(x0, multipliers_4, 0x00));
                                 ^
      /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.0/include/__wmmintrin_pclmul.h:54:13: note: expanded from macro '_mm_clmulepi64_si128'
        ((__m128i)__builtin_ia32_pclmulqdq128((__v2di)(__m128i)(__X), \
                  ^
      ~~~
      
      I noticed a comment by passy in https://github.com/facebook/flipper/pull/125 referencing this same error message "needs target feature pclmul", and the comment also said that it "should be easily fixable by ensuring that -mpclmul is added to the CFLAGS". I had trouble identifying the system architecture as he suggested, but figured that we could just check if the compiler supports that flag and add it for those specific source files if so.
      
      This fixes the 10.14 build for me. It would be nice to set up CI to keep this build working, but it's difficult to currently set up CI for 10.14 without your own hardware, since travis and azure pipelines only support up to 10.13.
      Pull Request resolved: https://github.com/facebook/folly/pull/1067
      
      Reviewed By: Orvid
      
      Differential Revision: D14500840
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 939fb6d495b05491af6e95adc16a0d0bbe86829f
      c3c0dbe1
  5. 18 Mar, 2019 9 commits
    • Joe Loser's avatar
      Fix shellcheck warnings on docker_build_with_ccache.sh (#1054) · 605b8ede
      Joe Loser authored
      Summary:
      - Fix a few shellcheck warnings on `docker_build_with_ccache.sh`.
      - This will help when new changes are made to this script as
        shellcheck is run internally.
      Pull Request resolved: https://github.com/facebook/folly/pull/1054
      
      Reviewed By: yns88
      
      Differential Revision: D14454554
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: f4b692f21d2478f9db06b478ce56c1ba57fa59e0
      605b8ede
    • Andrii Grynenko's avatar
      Use KeepAlive in co_viaIfAsync · 33421a75
      Andrii Grynenko authored
      Summary: This allows us to always use a dummy keep-alive for all awaitables from coro::Task. We also don't need a custom await_transform for coro::Task anymore.
      
      Reviewed By: lewissbaker
      
      Differential Revision: D14491068
      
      fbshipit-source-id: 0e931c2ae9f52da770b08207e551401e4a3778cb
      33421a75
    • Aaryaman Sagar's avatar
      Remove android debug code · 33cf2370
      Aaryaman Sagar authored
      Summary: Title, remove debugging code that does not seem to be needed anymore
      
      Reviewed By: yfeldblum, davidtgoldblatt
      
      Differential Revision: D14267545
      
      fbshipit-source-id: df57e4b85d850e344b12ce1768a1e1a56ae72bce
      33cf2370
    • Yedidya Feldblum's avatar
      Fix fibers build - Semaphore::future_wait declared but undefined · b7e9f46e
      Yedidya Feldblum authored
      Summary:
      [Folly] Fix fibers build - `Semaphore::future_wait` declared but undefined.
      
      The `#if` guarding related code is overly aggressive.
      
      Reviewed By: Orvid
      
      Differential Revision: D14498252
      
      fbshipit-source-id: 4183fc67fece0e2bdad1fab5c83e7b9a50ae847b
      b7e9f46e
    • Neel Goyal's avatar
      Add BasicTransportCertificate · 72080476
      Neel Goyal authored
      Summary: Add a basic transport cert with only the needed fields.
      
      Reviewed By: knekritz
      
      Differential Revision: D14429070
      
      fbshipit-source-id: 6728310f75a17e3640025f689b69ffcc3f829522
      72080476
    • Jimmy Lu's avatar
      disable conversion warnings in folly/Format · cc4f4f61
      Jimmy Lu authored
      Summary: as title. Disabling -Wconversion since it can be triggered pretty easily. We've run into this a lot in cachelib code. Until now, we've manually disabled -Wconversion around the header for folly/Format.h in our own code. But I think it's much easier just to disable it inside Format-inl.h itself.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D14471124
      
      fbshipit-source-id: df6bcbd57cbbdb0e6a762eaa5d11548c9e614e1b
      cc4f4f61
    • Joe Loser's avatar
      Contains with precomputed hash for F14Map and F14Set (#1063) · 5204fe2f
      Joe Loser authored
      Summary:
      - Implement `contains(F14HashToken const& token, key_type const& key)` similar
        to the C++20 `contains(key_type const& key, size_t hash)` interface. Parameter order follows existing F14 interface, even though it differs from the C++20 interface.
      - Implement heterogeneous lookup overloads of `contains` of the above.
      Pull Request resolved: https://github.com/facebook/folly/pull/1063
      
      Reviewed By: nbronson
      
      Differential Revision: D14500835
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 85b0fbb66c2db948958e67105cf8ef98851ee0a6
      5204fe2f
    • Yedidya Feldblum's avatar
      conditional_t · 8a00bcc5
      Yedidya Feldblum authored
      Summary: [Folly] `conditional_t`, like `std::conditional_t` but where the result can be used in deducible contexts.
      
      Reviewed By: nbronson
      
      Differential Revision: D14477367
      
      fbshipit-source-id: d0a9da7f0e1584a45a0709e80e2b8afb2851214c
      8a00bcc5
    • Aaryaman Sagar's avatar
      Remove unused dependency on optional from ParkingLot · 4ffe3aae
      Aaryaman Sagar authored
      Summary: as title
      
      Reviewed By: yfeldblum
      
      Differential Revision: D14476923
      
      fbshipit-source-id: 5ce16adb2402720b16acd12ab0003c1e93395f6c
      4ffe3aae
  6. 17 Mar, 2019 1 commit
  7. 16 Mar, 2019 4 commits
  8. 15 Mar, 2019 4 commits
    • Joe Loser's avatar
      Remove unnecessary typename in F14Table.h (#1056) · 2284a6db
      Joe Loser authored
      Summary:
      - Remove unneeded typename for a using alias in `F14Table.h`.
      Pull Request resolved: https://github.com/facebook/folly/pull/1056
      
      Reviewed By: nbronson
      
      Differential Revision: D14473219
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: a6ac26c42dbca219ce123aff00b1ee7079068007
      2284a6db
    • James Gill's avatar
      Implement c++20 contains method on F14Map and F14Set · 94a77ab3
      James Gill authored
      Summary:
      contains() is part of the c++20 spec.  This implements it, and
      refactors count() to use contains().
      
      Reviewed By: nbronson
      
      Differential Revision: D14426805
      
      fbshipit-source-id: 2435124e9c0a8eeb4e53109f0ddac884c227c781
      94a77ab3
    • James Gill's avatar
      Replace std::size_t return types in F14 to size_type · e57833b0
      James Gill authored
      Summary:
      The heterogenous count() method currently returns size_type, unlike
      similar methods (normal count(), F14Map.count() methods).  This
      standardizes it.
      
      Reviewed By: nbronson
      
      Differential Revision: D14426807
      
      fbshipit-source-id: 140be39fcda99c9f82ced3962ddcbdd1d5f53ba6
      e57833b0
    • Fuat Geleri's avatar
      Folly/Benchmark: Make user counters readable · cd62e86f
      Fuat Geleri authored
      Summary:
      When a user counter is added to benchmarks, the counter's value is written as a bare integer.
      This change gives chance to user to either still keep it reported as bare integer, a time value or a metric value.
      
      Differential Revision: D14451341
      
      fbshipit-source-id: 95e64a89c201bb385d9a403f3442fa70c2ac7e2a
      cd62e86f
  9. 14 Mar, 2019 1 commit
    • Ilya Maykov's avatar
      fix cmake rule for AsyncIOTest · fdf4feab
      Ilya Maykov authored
      Summary: Make AsyncIOTest.cpp conditionally depend on $LIBAIO_FOUND in CMakeLists.txt.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D14365682
      
      fbshipit-source-id: 5ac7dc25174ab48ed1de8846956e69c7759fc9bd
      fdf4feab
  10. 13 Mar, 2019 3 commits
    • Kirk Shoop's avatar
      change definition of Executor · 19d7960b
      Kirk Shoop authored
      Summary: convert all executors in pushmi and all executor concepts and usage in pushmi to use `schedule()`
      
      Reviewed By: ericniebler
      
      Differential Revision: D13463902
      
      fbshipit-source-id: 01eac4fe0b5cd49afbd95118db769db59a3b968c
      19d7960b
    • Orvid King's avatar
      Remove AsyncUDPSocket->getFD · ce0fd826
      Orvid King authored
      Summary: It's dead.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D14425042
      
      fbshipit-source-id: 098de614955eedd7ccc733858db85b997d01d9e0
      ce0fd826
    • Orvid King's avatar
      Add a SemiFuture variant of collect · f8dbfe77
      Orvid King authored
      Summary: At least make it possible to do things correctly.
      
      Reviewed By: yfeldblum, LeeHowes
      
      Differential Revision: D14426753
      
      fbshipit-source-id: 63b3572175224dbbda828981a5c9f067a5e35f33
      f8dbfe77
  11. 12 Mar, 2019 3 commits
    • Dan Melnic's avatar
      Fix typo · 7ecfb621
      Dan Melnic authored
      Summary: Fix typo
      
      Reviewed By: aary
      
      Differential Revision: D14411090
      
      fbshipit-source-id: 4ca0273201facebc815db26d23662d0d192c831f
      7ecfb621
    • Yedidya Feldblum's avatar
      Move FOLLY_DEFINE_CPO to folly/lang/CustomizationPoint.h · ca91b0ed
      Yedidya Feldblum authored
      Summary:
      [Folly] Move `FOLLY_DEFINE_CPO` to `folly/lang/CustomizationPoint.h`.
      
      And move `StaticConst` to top-level `folly` namespace and into `folly/lang/`.
      
      And Americanize the spellings of words in the comments.
      
      Reviewed By: ericniebler, lewissbaker
      
      Differential Revision: D14402315
      
      fbshipit-source-id: e13dbc9d471ee73ba0a289d375c235734334b920
      ca91b0ed
    • Jacob Lacouture's avatar
      Future<Try<T>> -> Future<T> · 4008ab21
      Jacob Lacouture authored
      Summary:
      future.then([] -> T)  currently returns Future<T>
      future.then([] -> Try<T>)  currently returns Future<Try<T>>
      
      This changes that behavior, such that future.then([] -> Try<T>) will
      return Future<T>.
      
      This is a more desirable interface for futures. It also simplifies
      implementation of a separate task (propagating exceptions more
      efficiently through chained callbacks) because it enables us to internally
      substitute lambdas returning T with lambdas returning Try<T>.
      
      Reviewed By: yfeldblum, ryantimwilson
      
      Differential Revision: D14318624
      
      fbshipit-source-id: 51363e82ceb86bfecf87ae661188be9ca3dd8002
      4008ab21