1. 06 Jul, 2019 3 commits
    • Marshall Cline's avatar
      gen-to-ranges: rename folly::gen::detail types · d5711806
      Marshall Cline authored
      Summary:
      Context: migration of fbcode from folly::gen to range-v3 by way of pipe-adapters ("pipe fittings") that allow a `|`-based pipeline mixing {std-containers and/or range-v3} with folly::gen, e.g.,
      
      ```
      auto result = myVec              // anything consistent with range-v3 or these adapters
          | ranges::view::filter(...)  // zero-or-more range-v3 pipe-elems
          | <adapter-goes-here>        // <==**one of the pipe-adapters provided by this task**
          | folly::gen::blah();        // trailing pipe-elems are folly::gen
      ```
      
      Goal of this task: rename the pipe-adapter folly::gen::detail types so those names are consistent with the names of the corresponding folly::gen::objects.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D16138397
      
      fbshipit-source-id: 3e6145f5bb35c8d2bd14a9a3eb645e153743d499
      d5711806
    • Marshall Cline's avatar
      folly::gen to range-v3: relo op| · 11cc0c8f
      Marshall Cline authored
      Summary:
      Relocate "folly::gen to range-v3" pipe-adapters into the corresponding adapter-struct (fix compile-time errors, plus improve clarity about the linkage between the `operator|` and corresponding type).
      
      Context: pipe-adapters ("pipe fittings") that allow a `|`-based pipeline mixing {std-containers and/or range-v3} with folly::gen, e.g.,
      
      ```
      auto result = myVec              // anything consistent with range-v3 or these adapters
          | ranges::view::filter(...)  // zero-or-more range-v3 pipe-elems
          | <adapter-goes-here>        // <==**one of the pipe-adapters provided by this task**
          | folly::gen::blah();        // trailing pipe-elems are folly::gen
      ```
      
      This diff relocates those folly::gen-to-range-v3 adapters.
      
      Reviewed By: yfeldblum, ericniebler
      
      Differential Revision: D16053008
      
      fbshipit-source-id: 078a95990d5277ac0c4e02452cd8fd36bead8306
      11cc0c8f
    • Lucian Grijincu's avatar
      folly: conv: test: expand test to showcase accepted / not-accepted combinations · 525c49f9
      Lucian Grijincu authored
      Reviewed By: yfeldblum
      
      Differential Revision: D16138503
      
      fbshipit-source-id: 49243eeb6eb24417c912b89beb84d15bae73053f
      525c49f9
  2. 05 Jul, 2019 3 commits
    • William McDonald's avatar
      Easily specify a custom Formatter · 880391a0
      William McDonald authored
      Summary:
      StandardLogHandlerFactory has a good amount of logic in it for handling
      options. It would be nice to reuse it when specifying a custom Formatter.
      
      This also exposes the WriterFactory from StreamHandlerFactory, so that a user
      can re-use the code to create the default LogWriter when using a custom
      Formatter.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D16074437
      
      fbshipit-source-id: d79947e2fe93b8920b83294438a88c4dd871986b
      880391a0
    • Puneet Kaushik's avatar
      getdeps: Move print "Mapping scratch dir" to stderr · bea3d4b2
      Puneet Kaushik authored
      Summary:
      Mapping scratch dir <from> -> <to> show up in the output of all the show dir commands on Windows, so removing it.
      example: getdeps.py show-inst-dir eden
      
      Reviewed By: wez
      
      Differential Revision: D16092494
      
      fbshipit-source-id: 910288a8d23c1d68c5e70b7b2dbb36ef53a326fc
      bea3d4b2
    • Puneet Kaushik's avatar
      getdeps: Add subclass to copy dependencies for PE executables on Windows · 9e96e531
      Puneet Kaushik authored
      Summary: This adds a subclass to copy the dynamic dependencies on Windows.
      
      Reviewed By: wez
      
      Differential Revision: D16110433
      
      fbshipit-source-id: 14d876947f3ec504382fef0d459367a7119ff6cb
      9e96e531
  3. 04 Jul, 2019 1 commit
  4. 03 Jul, 2019 4 commits
    • Wez Furlong's avatar
      getdeps: dynamic dependency munging · 3baae4dd
      Wez Furlong authored
      Summary:
      This diff adds a `fixup-dyn-deps` subcommand that is intended to
      aid in packaging on multiple platforms.
      
      Its purpose is to copy a set of executable object files from the getdeps
      installation directories and place them into an installation staging
      area that will then be used to create some kind of package (rpm, tarball etc.).
      
      The dynamic dependencies of the executables are determined and also copied
      into the destination area, and the important part: the execute is rewritten
      such that it will load the deps out of an alternate installation prefix.
      
      The implementation of this command draws on similar scripts in use for
      the watchman and eden packaging on windows and macos.  This diff adds
      linux support using the `patchelf` utility.
      
      Reviewed By: pkaush
      
      Differential Revision: D16101902
      
      fbshipit-source-id: 5885125971947139407841e08c0cf9f35fdf5895
      3baae4dd
    • Wez Furlong's avatar
      getdeps: move the guts of _compute_env to a helper in buildopts · 3b937043
      Wez Furlong authored
      Summary: I want to use this logic outside of a builder implementation
      
      Reviewed By: pkaush
      
      Differential Revision: D16101914
      
      fbshipit-source-id: db3c9ac6c84a92ab84a18dddb931953b0a51f127
      3b937043
    • Wez Furlong's avatar
      getdeps: add a manifest for the patchelf utility · 6c84edde
      Wez Furlong authored
      Summary:
      The intent is to use this in a future diff to make packaging a first
      class concept; it can be used similarly to how we munge dynamic deps on darwin
      systems.
      
      Reviewed By: shri-khare
      
      Differential Revision: D16099931
      
      fbshipit-source-id: c66f994b7c07e903fbf2989946b17a0991e12a91
      6c84edde
    • Rosen Penev's avatar
      folly: Don't include wait.h (#1183) · ccc673a6
      Rosen Penev authored
      Summary:
      wait.h is a GNU header. The POSIX one is sys/wait.h. Fixes musl warning:
      
      warning redirecting incorrect #include <wait.h> to <sys/wait.h>
      Pull Request resolved: https://github.com/facebook/folly/pull/1183
      
      Reviewed By: wez
      
      Differential Revision: D16097571
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 751e4929bc9f00c99c160be9a7dd904e57ad40ce
      ccc673a6
  5. 02 Jul, 2019 8 commits
    • Wez Furlong's avatar
      getdeps: improve debugging when failing to query tests from ctest · 032369f9
      Wez Furlong authored
      Summary:
      We're seeing a failure on macOS in a CI environment but don't have much context:
      
      ```
      Stderr:
      + GETDEPS=opensource/fbcode_builder/getdeps.py
      + opensource/fbcode_builder/getdeps.py test --facebook-internal watchman
      Traceback (most recent call last):
        File "opensource/fbcode_builder/getdeps.py", line 436, in <module>
          sys.exit(main())
        File "opensource/fbcode_builder/getdeps.py", line 422, in main
          return args.func(args)
        File "opensource/fbcode_builder/getdeps.py", line 342, in run
          builder.run_tests(install_dirs, schedule_type=args.schedule_type)
        File "/data/sandcastle/boxes/trunk-hg-fbcode-fbsource/fbcode/opensource/fbcode_builder/getdeps/builder.py", line 372, in run_tests
          buck_test_info = list_tests()
        File "/data/sandcastle/boxes/trunk-hg-fbcode-fbsource/fbcode/opensource/fbcode_builder/getdeps/builder.py", line 352, in list_tests
          data = json.loads(output.decode("utf-8"))
        File "/opt/homebrew/Cellar/python27/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
          return _default_decoder.decode(s)
        File "/opt/homebrew/Cellar/python27/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
          obj, end = self.raw_decode(s, idx=_w(s, 0).end())
        File "/opt/homebrew/Cellar/python27/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 384, in raw_decode
          raise ValueError("No JSON object could be decoded")
      ValueError: No JSON object could be decoded
      ```
      
      Add some more context to that error message so we can learn more.
      
      Reviewed By: pkaush
      
      Differential Revision: D16061528
      
      fbshipit-source-id: 23603a5d18651d20641ef1987b7094e73a9b1dbe
      032369f9
    • Puneet Kaushik's avatar
      Add support to pass vcvarsall path on the command line · 278873e4
      Puneet Kaushik authored
      Summary: On Windows "--vcvars-path" can be passed to point to the toolchain we want to use.
      
      Reviewed By: wez
      
      Differential Revision: D15926044
      
      fbshipit-source-id: 2b0cde793f7c7f8473b78afde8794640bae351f3
      278873e4
    • Luca Niccolini's avatar
      add manifest for mvfst and proxygen · 68cf61fc
      Luca Niccolini authored
      Reviewed By: udippant
      
      Differential Revision: D16075865
      
      fbshipit-source-id: 172aed7ebbfce987c78eea06e588048b0e2a755f
      68cf61fc
    • Miroslav Crnic's avatar
      NotificationQueueBenchmark multi consumer benchmarks · c2cf8102
      Miroslav Crnic authored
      Summary:
      NotificationQueue, although mostly not used as such, is a multi consumer queue and it's missing benchmarks for that part.
      
      There where also a couple of issues with original benchmark which this diff addresses:
      1. Benchamrks used to do N * number of producers number of iterations and didn't report increased iteration count back to benchmark
      2. Benchmark would not run the same case during whole benchmark time as producers where stopped as soon as they produced enough request and consumer would finish without contention
      
      Since these are very tight loops I added a busy loop param which can be varied the same way as batching parameter.
      This param adds some work in a form of a busy loop in both producers and consumer to make benchmarking cases, where producers/consumers are actually doing something except from posting to the queue, easier.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D16071580
      
      fbshipit-source-id: c75f2dd9ae8617be09834cdf153a4b4ae06aaaca
      c2cf8102
    • Miroslav Crnic's avatar
      NotificationQueueBenchmark add zero congestion benchmarks · 8bb0525b
      Miroslav Crnic authored
      Summary: While congested throughput is important it is also important not to regress non congested path too much.
      
      Reviewed By: aary
      
      Differential Revision: D16005428
      
      fbshipit-source-id: 7b98a7ef253fc306b3097f7236b57a5d453ed15d
      8bb0525b
    • Yedidya Feldblum's avatar
      Check for max value in test semaphore · 35c941e4
      Yedidya Feldblum authored
      Summary: [Folly] Check for max value in test semaphore, beyond which posts cannot be tolerated.
      
      Reviewed By: aary
      
      Differential Revision: D15938166
      
      fbshipit-source-id: 1f3fee97a9662dafc5b434c0449831147aa3c976
      35c941e4
    • Luca Niccolini's avatar
      Deprecate autoconf · 093067ce
      Luca Niccolini authored
      Summary:
      Remove all the autoconf files.
      And fully switch to the cmake build
      
      Reviewed By: udippant
      
      Differential Revision: D16066986
      
      fbshipit-source-id: 9e3082dded77ce85449cf5a3a03bed31c16b711f
      093067ce
    • brianpl's avatar
      Fix the implementation of max_align_t (#1180) · 72c08f7b
      brianpl authored
      Summary:
      Folly's `folly/lang/Align.h` header defines `folly::max_align_t`, which is usually taken from stdlib. This is to correct an error in legacy implementations of `std::max_align_t`, by logically reconstructing the maximum alignment value in a constexpr context.
      
      `max_align_t` depends on the function `detail::max_align_`, which is supposed to implement a recursive max value function using templates. However, the expression
      
      ```
      !(a < e) ? a : max_align_(e, es...)
      ```
      
      does not recursively compute the maximum value over `a`, `e`, `es...`. This expression actually selects the first value that is followed by a lower value.
      
      This error prevents folly from compiling on newer versions of clang, targeting x86, because `folly/CachelinePadded.h` statically checks `max_align_t` in an assertion, and then fails, because it thinks that `AtomicStruct<LifoSemHead, atomic>` is over-aligned.
      
      This corrects the implementation to:
      
      ```
      !(a < e) ? max_align_(a, es...) : max_align_(e, es...)
      ```
      
      Pull Request resolved: https://github.com/facebook/folly/pull/1180
      
      Reviewed By: Orvid
      
      Differential Revision: D16079107
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 13adbd6d1c117b3c547e7116216ee1069129b3c7
      72c08f7b
  6. 01 Jul, 2019 3 commits
    • Shrikrishna Khare's avatar
      fbcode_builder: getdeps: fboss: fix libmnl source · a8ea86cf
      Shrikrishna Khare authored
      Summary:
      The source we were downloading from (netfilter.org) should work, but
      unfortunately, is donw. This is causing getdeps FBOSS builds to fail. For now,
      download from a mirror which seems to be up.
      
      If this becomes a frequent issue with this repository/others, we can consider a
      different solution.
      
      Also, not sure how lfs pointer edit was missed by previous commit, added here.
      
      Reviewed By: phshaikh
      
      Differential Revision: D16070052
      
      fbshipit-source-id: dd9278254c77e1a5845ca331a9eeb36f2bf03071
      a8ea86cf
    • Mohamed Bassem's avatar
      Add missing test/Semaphore.h to Cmake header files · fbbe00b7
      Mohamed Bassem authored
      Reviewed By: yfeldblum
      
      Differential Revision: D16054275
      
      fbshipit-source-id: 266f2244fd4c28e1726f4f84d32d4f5d6856ec26
      fbbe00b7
    • Christos Stratopoulos's avatar
      Handle noexcept in SignatureOf_ and ArgTypes_, take 2 (#1178) · c0b79371
      Christos Stratopoulos authored
      Summary:
      Second attempt at https://github.com/facebook/folly/pull/1173
      
      This time the class template specializations are guarded with the `__cpp_noexcept_function_type` feature test macro to maintain compatibility with C++14.
      
      Open to replacing the raw macro with something like `FOLLY_POLY_NOEXCEPT_FUNCTION_TYPE` but that was not my first approach since it's more characters and there is not an extra case to test like with `FOLLY_POLY_NTTP_AUTO`.
      Pull Request resolved: https://github.com/facebook/folly/pull/1178
      
      Reviewed By: yfeldblum
      
      Differential Revision: D16057403
      
      Pulled By: Orvid
      
      fbshipit-source-id: 9b538c0f1b0614e69447202d1e4d60ed3fa709cb
      c0b79371
  7. 28 Jun, 2019 3 commits
    • Stiopa Koltsov's avatar
      Fix SSE4.2 detection in F14Table.h · f22119f1
      Stiopa Koltsov authored
      Summary: `_mm_crc32_u64` requires SSE 4.2, not just any SSE.
      
      Reviewed By: vener91
      
      Differential Revision: D16032673
      
      fbshipit-source-id: 13cb6299e14184b30a9a04f2644aee2f0cd1a60e
      f22119f1
    • Stiopa Koltsov's avatar
      Do not define __SSE4_2__ unconditionally in clang · 7af588f6
      Stiopa Koltsov authored
      Summary:
      Clang defines `_MSC_VER` on Windows, but it is not MSC.
      
      ```
      % ./third-party/toolchains/llvm/8.0.0/bin/windows/clang.exe -march=corei7 -dM -E -x c empty | grep MSC
      #define _MSC_BUILD 1
      #define _MSC_EXTENSIONS 1
      #define _MSC_FULL_VER 191225835
      #define _MSC_VER 1912
      ```
      
      We are not allowed to define `__SSE4_2__` in clang when clang assumes older arch, because in that case it refuses to compile SSE intrinsics, there is a couple of places in folly where we assume defined `__SSE4_2__` to use SSE4.2 intrinsics.
      
      On the other hand clang defines `__SSE4_2__` itself when it is available:
      
      ```
      % ./third-party/toolchains/llvm/8.0.0/bin/windows/clang.exe -march=corei7 -dM -E -x c empty | grep SSE
      #define __SSE2_MATH__ 1
      #define __SSE2__ 1
      #define __SSE3__ 1
      #define __SSE4_1__ 1
      #define __SSE4_2__ 1
      #define __SSE_MATH__ 1
      #define __SSE__ 1
      #define __SSSE3__ 1
      ```
      
      This is an example clang error on Windows:
      
      ```
      folly/container/detail/F14Table.h:1098:23: error: always_inline function '_mm_crc32_u64' requires target feature 'sse4.2', but would be inlined into function 'splitHash' that is compiled without support for 'sse4.2'
            std::size_t c = _mm_crc32_u64(0, hash);
      ```
      
      Reviewed By: vener91
      
      Differential Revision: D16038436
      
      fbshipit-source-id: 8728a8d91cadb936c9e244795c9270943fe005ad
      7af588f6
    • Andrii Grynenko's avatar
      Add a workaround for a TSAN atomics bug · e22d96d6
      Andrii Grynenko authored
      Summary: https://github.com/google/sanitizers/issues/970
      
      Reviewed By: yfeldblum
      
      Differential Revision: D16037542
      
      fbshipit-source-id: 8c2feb85454ae582498d38a474e8d5913c9438b1
      e22d96d6
  8. 27 Jun, 2019 4 commits
    • Lee Howes's avatar
      Adds SemiFuture support to futures::retrying · 4df20672
      Lee Howes authored
      Summary: Allows futures::retrying to take a continuation that returns a SemiFuture, and in that case to return a SemiFuture as the result.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D15876742
      
      fbshipit-source-id: da6f1614dd940b83ca048ecedf3d3645aa69b1f0
      4df20672
    • Scott Haskin's avatar
      Adding method getSendBufInUse and getRecvBufInUse to · a0394d84
      Scott Haskin authored
      Summary:
      Adding ability to get the current number of bytes used in the tx
      (transmit/send) socket buffer and the rx (receive) socket buffer.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15966995
      
      fbshipit-source-id: 29a51cd4caad265590baa45385712659fb3f3dac
      a0394d84
    • Kirk Shoop's avatar
      port properties from unifex · 74bf4289
      Kirk Shoop authored
      Summary: ported the properties header from unifex and added some simple compile tests
      
      Reviewed By: ericniebler
      
      Differential Revision: D15144375
      
      fbshipit-source-id: 580f8c8977abd070333779898f3ac47510932f87
      74bf4289
    • Stiopa Koltsov's avatar
      Missing include in fibers · 4f1d8454
      Stiopa Koltsov authored
      Summary: `FiberManagerInternal.h` uses `FOLLY_TLS` and `FOLLY_EXPORT` defines which are defined in `folly/Portability.h`.
      
      Reviewed By: vener91, Orvid
      
      Differential Revision: D16020265
      
      fbshipit-source-id: 7f80b397bd364cc53efb67568293da5c90fe97d9
      4f1d8454
  9. 26 Jun, 2019 1 commit
  10. 25 Jun, 2019 3 commits
    • Kirk Shoop's avatar
      add opt-in support for folly executors and event base · 0bb15ba8
      Kirk Shoop authored
      Summary:
      adds customizations for folly::Executor folly::EventBase and related types.
      The customizations make folly::Executor::KeepAlive<T> model the pushmi Executor, TimeExecutor, and Strand concepts as appropriate
      
      Reviewed By: ericniebler
      
      Differential Revision: D15418629
      
      fbshipit-source-id: d74a777ca743b5fb72664d9c1527837c3fbdb3ba
      0bb15ba8
    • Luca Niccolini's avatar
      enable CMake build (with HTTP/3) -- take 2 · 93b9af64
      Luca Niccolini authored
      Reviewed By: snarkmaster
      
      Differential Revision: D15730421
      
      fbshipit-source-id: 51eaac2ad443aadbab3ba772e651287c6b330408
      93b9af64
    • Kirk Shoop's avatar
      add interval_repeat() and test · 90b51d00
      Kirk Shoop authored
      Summary: interval_repeat is an algorithms for single senders. it repeats the predecessor single at the start time and again on an interval relative to that start time. the last parameter is an optional function that allows the time used for the next schedule to be modified.
      
      Reviewed By: ericniebler
      
      Differential Revision: D15945618
      
      fbshipit-source-id: d03cf079d870ceb65e9502c9ff0edcb87b6fd25e
      90b51d00
  11. 22 Jun, 2019 1 commit
  12. 21 Jun, 2019 5 commits
  13. 20 Jun, 2019 1 commit
    • Nathan Bronson's avatar
      restrict memory_resource to >= c++17 · 52a691fb
      Nathan Bronson authored
      Summary:
      This diff restricts use of memory_resource to C++17 or later,
      to avoid problems with compilation on some MSVC platforms.
      
      Reviewed By: kevinhu88
      
      Differential Revision: D15923470
      
      fbshipit-source-id: 91b2446c096fbcb71c8bf5a0f1967bff4cbd1ce8
      52a691fb