1. 06 May, 2020 6 commits
    • Adam Simpkins's avatar
      build and run FileUtilTest in CMake builds · 6808eb56
      Adam Simpkins authored
      Summary:
      Remove the `HANGING` tag from this test, so that it is run by default in the
      CMake build.
      
      Differential Revision: D21367512
      
      fbshipit-source-id: 4bb707c83005ee8cd39ed2ce6b82b7f0c53f2c88
      6808eb56
    • Adam Simpkins's avatar
      disable the writeFileAtomic() function on Windows · 06302af7
      Adam Simpkins authored
      Summary:
      This puts the `writeFileAtomic()` function behind and `#ifndef _WIN32` check,
      to disable it on Windows.
      
      While this function currently compiles on Windows, it does not behave
      correctly: it often fails with "Permission denied" errors when trying to use
      folly's emulated `fchmod()` function.  Additionally, even the `fchmod()`
      succeeds (or is skipped) it fails if the destination path already exists, as
      `rename()` on Windows does not allow replacing an existing file.  While we
      could attempt to replace the existing file, doing so would not be atomic.  We
      might be able to achieve this with transactional NTFS features if the
      underlying file system is NTFS, but according to Microsoft these APIs are
      discouraged and may be removed in future versions of Windows.
      
      Therefore for now simply disable `writeFileAtomic()` on Windows.
      
      Differential Revision: D21367511
      
      fbshipit-source-id: 50a5a1004feacc8bdb0a24421bea339962e1d546
      06302af7
    • Adam Simpkins's avatar
      build the logging example in CMake builds · 6af9edb3
      Adam Simpkins authored
      Summary:
      Add a CMakeLists.txt file to build the logging example program in CMake
      builds.
      
      This also disables the `AsyncFileWriter.fork` test on Windows, since `fork()`
      isn't available on Windows.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21332968
      
      fbshipit-source-id: b578df92576e79d34b7fe2bf79dc8f30e0fd6d6b
      6af9edb3
    • Adam Simpkins's avatar
      update the logging example to reflect the current default level · 282cc3f6
      Adam Simpkins authored
      Summary:
      D8941725 changed the default log level from WARNING to INFO.  This updates the
      comments in the example logging program to reflect that.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21332969
      
      fbshipit-source-id: 88b206bf4dc891d8868a34ea02d91cc79b7c5c48
      282cc3f6
    • Wez Furlong's avatar
      getdeps: fix builds with cached project downloads · aef5dd9e
      Wez Furlong authored
      Summary:
      D21364132 accidentally broke this; we can't run the fetcher
      for projects for which we pulled the build out of cache, because there
      is no source to update in that case.
      
      This commit adjusts the logic so that we write out a marker file
      to indicate that we installed a build from cache and to look for
      that file being present to gate the new update logic.
      
      Reviewed By: lnicco
      
      Differential Revision: D21419122
      
      fbshipit-source-id: 304670848add22531d88549d66f22c40ff255140
      aef5dd9e
    • Dan Melnic's avatar
      Return 0 from PollIoBackend::eb_event_add if the event type is not set · 911311ab
      Dan Melnic authored
      Summary: Return 0 from PollIoBackend::eb_event_add if the event type is not set
      
      Reviewed By: danobi
      
      Differential Revision: D21416811
      
      fbshipit-source-id: 5825e473dca06d33017785e4d73947aade5f554c
      911311ab
  2. 05 May, 2020 18 commits
    • Maged Michael's avatar
      hazptr: Add warnings for pathological performance. · 831d84b5
      Maged Michael authored
      Summary:
      Add warnings for pathological cases:
      - Too large retired lists
      - Thread cache overflow
      
      Move the warning for executor backlog to a separate function for clearer profiling.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D21314798
      
      fbshipit-source-id: e07d6182309a0940adbdf76774a9c44fb1aa200c
      831d84b5
    • Andrew Huang's avatar
      Give ownership of new session callbacks to SSLContext · 2ee65365
      Andrew Huang authored
      Summary: Giving SSLContext ownership over the new session callback attached to SSL_CTX, so that it may do additional work with the new session (i.e. forward the session to its corresponding abstracted SSLSession).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21021333
      
      fbshipit-source-id: f1dc8bd17150d45498ae1c22ef4eed1d2ca00c01
      2ee65365
    • Andrew Huang's avatar
      Add SSLContext to OpenSSL SSL_CTX ex data · d908fe0b
      Andrew Huang authored
      Summary: Adding SSLContext members to SSL_CTX ex data to access them inside callbacks attached to SSL_CTX (e.g. session callbacks)
      
      Reviewed By: yfeldblum, mingtaoy
      
      Differential Revision: D21021353
      
      fbshipit-source-id: 6aa3995f7d719ca7e87bad798876a92dd5765b86
      d908fe0b
    • Lewis Baker's avatar
      Clarify documentation in folly::coro::Task about when RequestContext is captured · aee68ea3
      Lewis Baker authored
      Summary:
      Clarify that the RequestContext is captured at the time the coroutine is
      started (e.g. due to co_awaiting it or calling .start()) rather than at
      the time the coroutine is called.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D21353947
      
      fbshipit-source-id: 40ec7b25d84e96a611a1f63b6184a0d6a016948d
      aee68ea3
    • Shannon Zhu's avatar
      Convert type check targets in folly to use configuration · c230732e
      Shannon Zhu authored
      Summary:
      Migrating buck integration to use configurations, which is more performant and is the primary supported way to run Pyre.
      Mypy is no longer supported at Facebook, so mypy buck integration is covered in this migration as well.
      
      Reviewed By: grievejia
      
      Differential Revision: D21398810
      
      fbshipit-source-id: 12c0cd395e243703f4380b31527d0c202d58cec2
      c230732e
    • Adam Simpkins's avatar
      implement readvFull() and writevFull() using read()/write() on Windows · b88ccd9e
      Adam Simpkins authored
      Summary:
      On Windows, implement `readvFull()` and `writevFull()` by calling `read()` and
      `write()` repeatedly, rather than `readv()` and `writev()`.
      
      Windows does not provide native implementations of `readv()` and `writev()`,
      so the code was previously using implementations provided by folly in
      `folly/portability/SysUio.cpp`.  The folly implementations attempted to lock
      the file to provide similar atomicity guarantees that `readv()` and `writev()`
      provide on POSIX.  However, callers of `readvFull()` and `writevFull()` don't
      care about this atomicity (since they are willing to do multiple `readv()` and
      `writev()` calls if necessary).  Therefore this locking behavior is not
      needed.  Locking in this case is undesirable because it adds extra overhead,
      and fails in some cases.  For instance, attempting to lock stderr blocks for 9
      seconds before eventually failing.
      
      Differential Revision: D21367446
      
      fbshipit-source-id: b2ae3c9c5da977402336c750d3d21ba9825527d9
      b88ccd9e
    • Dan Melnic's avatar
      Use zerocopy only if all the IOBufs in the chain have a SharedInfo · e5c56348
      Dan Melnic authored
      Summary: Use zerocopy only if all the IOBufs in the chain have a SharedInfo
      
      Reviewed By: knekritz
      
      Differential Revision: D21342852
      
      fbshipit-source-id: 458c32ef336b76ed0dc226ea670b7c04c1427bee
      e5c56348
    • Andrew Huang's avatar
      Handle session resumption with abstracted SSLSession · 3bd6e353
      Andrew Huang authored
      Summary: Add session resumption functionality in AsyncSSLSocket for the new abstracted SSLSession. Add logic to resume sessions correctly no matter which API is used, allowing for a piecewise transition to using the abstracted SSLSession.
      
      Reviewed By: mingtaoy
      
      Differential Revision: D20600380
      
      fbshipit-source-id: bb81d5be95ccaa6486a7431391676f3e5c0b5b8e
      3bd6e353
    • Nate Stedman's avatar
      Fix some broken documentation comments · 1972a4b5
      Nate Stedman authored
      Summary: I temporarily enabled Clang's `-Wdocumentation` flag, which reports things like using an `param` for a parameter that doesn't exist. [Full explanation with examples here](https://clang.llvm.org/docs/DiagnosticsReference.html#wdocumentation).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21396362
      
      fbshipit-source-id: d7b34bc14af7bb1b0901a8f195c02674eb587fbc
      1972a4b5
    • Lukas Piatkowski's avatar
      mononoke/opensource: temporarily remove mononoke manifest · 7c383d4e
      Lukas Piatkowski authored
      Summary: The oss jobs are causing problems to the developers now, lets disable them temporarily.
      
      Reviewed By: StanislavGlebik
      
      Differential Revision: D21400898
      
      fbshipit-source-id: f7a3567056633d9eef98a8d05a37cd029c9e506c
      7c383d4e
    • Xavier Deguillard's avatar
      windows: default to c++17 · 6fad3d5a
      Xavier Deguillard authored
      Summary:
      While compiling EdenFS on Windows, for every single file being compiled,
      cl.exe complains that 2 incompatible /std option are being passed in on the
      command line, a c++latest, and a c++17. The former is added by this file,
      while the later is added by cmake via CMAKE_CXX_STANDARD.
      
      I'm not exactly sure why the default is set to c++latest, but it's guaranteed
      to always force cl.exe to generate a warning, as it simply cannot be set via
      CMAKE_CXX_STANDARD.
      
      A better fix to this would be to set CMAKE_CXX_STANDARD to 17, but since
      folly still supports cmake 3.0, that didn't know about c++17, this can't
      be done.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21392360
      
      fbshipit-source-id: fc0e29ed89adf0a2c0b0193e7bd5f033463ed376
      6fad3d5a
    • Ilya Maykov's avatar
      add support for VAES and VPCLMULQDQ CPUID flags · 6f06ca66
      Ilya Maykov authored
      Summary: Add support for detecting x86_64 vectorized AES (VAES) and vectorized carry-less multiplication (VPCLMULQDQ) CPU flags.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21271564
      
      fbshipit-source-id: 08be20c07d6dfb562b8a0c1e86b77a9a416445fb
      6f06ca66
    • Wez Furlong's avatar
      getdeps: fix an fbsource invalidation problem · 257e0716
      Wez Furlong authored
      Summary:
      When the commit hash changed in fbsource, we would correctly decide
      that we'd need to rebuild first-party projects but we would incorrectly skip
      running the fetcher.update method.  This would mean that we'd not perform the
      shipit run and that our shipit tree would diverge from the source tree.
      
      This commit resolves this by performing the fetcher.update but ignoring
      the source update status in this case.
      
      Reviewed By: xavierd
      
      Differential Revision: D21364131
      
      fbshipit-source-id: b4001e549c7d3f27aa4a21b19893c9bb7c0f6d1f
      257e0716
    • Wez Furlong's avatar
      getdeps: improve build invalidation for dependencies · 2c34ec09
      Wez Furlong authored
      Summary:
      We didn't do a great job of recognizing that we'd need to
      build a project when one of its dependencies had changed: we relied
      chiefly on the dependency hash for this and could fail to handle
      changes in individual source files.
      
      This commit helps to improve this situation by checking to see if
      any installed files in the dependencies of a manifest are newer than
      the most recent built time of a given manifest.  If so, we'll trigger
      a build.  We try to be reasonably smart about deciding when to trigger
      a cmake reconfigure if it looks like cmake files in the deps have
      been changed.
      
      Reviewed By: xavierd
      
      Differential Revision: D21364132
      
      fbshipit-source-id: 7534496e10d1f532aa9cf865900ace84a8785327
      2c34ec09
    • Wez Furlong's avatar
      getdeps: refine makefiles matcher for cmake reconfigure · d8168ba9
      Wez Furlong authored
      Summary:
      Only run cmake reconfigure for .cmake, .cmake.in and CMakeLists.txt
      files changes.
      
      Previously we would reconfigure for any change to a file with a path that
      matched `cmake` which could result in false positives in cases where
      you may be iterating on .py or .c files in shared cmake directories.
      
      This also reclassifies non-cmake files under fbcode_builder/CMake as source
      files so that we run cmake for those; previously they would cause a
      reconfigure and build, now they just cause a build.
      
      Reviewed By: xavierd
      
      Differential Revision: D21364133
      
      fbshipit-source-id: a1231f657d6c6056b269656c677d3449d8715cf6
      d8168ba9
    • Wez Furlong's avatar
      getdeps: code formatting · 99536b53
      Wez Furlong authored
      Summary:
      Our linter really wants to include formatting changes unrelated
      to my diff stack.
      
      This is a formatting only change to avoid clouding my diffs; no functional
      effect.
      
      Reviewed By: xavierd
      
      Differential Revision: D21364519
      
      fbshipit-source-id: 7670dd4154e788f593f256aabdfdeef6d17aeec4
      99536b53
    • Adam Simpkins's avatar
      getdeps: avoid blowing away too much data when invalidating the CMake cache · 4fbb7cf2
      Adam Simpkins authored
      Summary:
      Previously getdeps would remove the entire top-level `CMakeFiles` directory
      from the build output when it wanted to invalidate the CMake cache.  This
      directory is used to keep all of the compiled object files for any libraries
      or executables defined in the top-level CMakeLists.txt file.  Blowing away
      this directory forces all of these sources to be re-compiled, even if this was
      not necessary.  This is particularly problematic for folly, which compiles all
      of its source files via rules in the top-level CMakeLists.txt target file.
      
      I did have the code still blow away the CMake error and output logs in this
      directory: in the past I have seen situations where CMake would not update
      these files on new CMake runs if they already existed.
      
      Reviewed By: wez
      
      Differential Revision: D21360668
      
      fbshipit-source-id: 6fcd1a8e371d756114fbab60d8636be8cd5f8978
      4fbb7cf2
    • Adam Simpkins's avatar
      getdeps: indicate that folly depends on lz4 · 97a2fc14
      Adam Simpkins authored
      Summary:
      Update the manifest file for folly to indicate a dependency on lz4.
      folly does not require lz4 be available, but it will use it if it is found at
      configure time.
      
      getdeps is unfortunately not strict about providing projects only with the
      dependencies that they require at build time.  This causes it to sometimes
      make lz4 available to folly (if you are also building another project that
      requires lz4), and sometimes not.  This ends up causing changes in
      folly-config.h depending on which projects you are building, forcing all of
      the folly sources to be recompiled.
      
      In the future we perhaps should update getdeps to consistently only pass in
      include directories for dependencies actually listed in the manifest file.
      However, specifying that folly depends on lz4 also works to mitigate this
      particular issue for now, and it is also generally desirable to build folly
      with lz4 support.
      
      Reviewed By: wez
      
      Differential Revision: D21359995
      
      fbshipit-source-id: aaf61671b7750d6c47e3613c732d220b3311b5ba
      97a2fc14
  3. 04 May, 2020 2 commits
    • Yedidya Feldblum's avatar
      c_array · d7d48e47
      Yedidya Feldblum authored
      Summary: [Folly] `c_array`, a container for returning C arrays from `constexpr` functions. May be used until C++17 may be assumed, since C++17 specifies `constexpr` member functions of `std::array` which make `std::array` suitable for the purpose and a better choice since it  can house zero-sized arrays.
      
      Reviewed By: markisaa
      
      Differential Revision: D21382680
      
      fbshipit-source-id: 56a6528bb05988c1f1c8916f9267575783dc6276
      d7d48e47
    • Misha Shneerson's avatar
      fix SharedPtr initialization · c518e9ec
      Misha Shneerson authored
      Summary: fix D21371986's sadness (SEGV  for `folly::make_exception<TException>().class_name()`)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21373766
      
      fbshipit-source-id: 0dd951fd9393e73c5c38670167312c3d2e619fb5
      c518e9ec
  4. 01 May, 2020 2 commits
    • Andrew Doran's avatar
      Back out "Disable TSAN instrumentation across StaticMetaBase::onThreadExit()." · 98419a68
      Andrew Doran authored
      Summary:
      Sorry about the churn (& time spent on this), but this backs out the change in D20671620.
      
      Despite best efforts it seems I've missed something and the issue runs deeper than TSAN observing thread exit.
      
      My change has possibly only altered the timing of events, and has exposed another related failure during testpilot runs that didn't occur before, so I think it's best to return to baseline.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21310561
      
      fbshipit-source-id: 369865f185415123ea8fddf6007115b87ea8fe82
      98419a68
    • Wez Furlong's avatar
      eden: enable rocksdb in the windows build · a1340878
      Wez Furlong authored
      Summary:
      In the initial stages of the windows port we had
      problems building rocksdb on windows, so we disabled it.
      
      These days we're able to build it and detect it--we even
      require it in the cmake code, but hadn't gotten around
      to telling the rest of the code that we can use it.
      
      This commit re-enables it in the build but leaves sqlite
      as the default engine until we're able to perform some
      benchmarking.
      
      Rocksdb itself has some build issues on Windows; it doesn't
      use cmake to locate dependencies, so even though we built
      snappy it doesn't know how to find it without modifying the
      source:
      https://github.com/facebook/rocksdb/blob/master/thirdparty.inc#L4
      
      For that reason, we disable the use of Snappy in the Windows build.
      However, in the version of rocksdb that we were using, it would
      default to trying to use Snappy even though it wasn't compiled in
      and throw an exception.
      
      I've upgraded to a newer version of rocksdb that will simply not
      use compression if no compression was enabled at build time.
      
      Given that we mostly store relatively small objects, I'm assuming
      that the lack of compression is fine for now.
      
      Reviewed By: xavierd
      
      Differential Revision: D21319896
      
      fbshipit-source-id: 2a2d06d4bd5382706e9220f9b4a2de99dc18311d
      a1340878
  5. 30 Apr, 2020 9 commits
  6. 29 Apr, 2020 3 commits
    • Wez Furlong's avatar
      getdeps: split monolithic GH actions CI spec up (#1360) · 43eb92d9
      Wez Furlong authored
      Summary:
      Rather than have a single main.yml file containing all off the different
      builds, split that up so that we have one file per build environment
      (linux, mac, windows).
      
      This has a couple of advantages:
      
      * It is quicker to see the status of just one of the platforms
      * Artifact collection for one platform is not blocked pending completion
        of the builds for all systems
      * It's a little easier to understand what is happening for a single platform
      
      To support having multiple files I've changed the output-file option to
      be an output-dir.
      
      I've included the rm of main.yml in this commit.  Once this gets
      imported back to the FB internal system I'll amend in an update to
      the helper script that updates all of our opensource builds and run
      and amend that.
      Pull Request resolved: https://github.com/facebook/folly/pull/1360
      
      Test Plan:
      the GH action status on this PR should show three different
      actions running, one for each platform.
      
      I updated and ran
      `fbcode/opensource/fbcode_builder/getdeps/facebook/update-all-github-actions.sh`
      to regenerate all the actions files for FB.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21310991
      
      Pulled By: wez
      
      fbshipit-source-id: 604ef652c8f746781a4b410c6b996cdee4524e0d
      43eb92d9
    • Wez Furlong's avatar
      fb_py_win_main.c: fix File Not Found errors on windows · b2003abb
      Wez Furlong authored
      Summary:
      This commit resolves an issue with our zipapp executables
      on Windows that meant that the only reliable way to start them was
      to use the fully path to the executable.
      
      The root cause is that the __wargv array is produced by parsing the
      process command line into an array, and if you ran `watchman-wait -h`
      __wargv[0] would have `watchman-wait` rather than the fully qualified
      path to the executable that the zipapp plumbing requires.
      
      The fix is to ask the system for the fully qualified path and ensure that
      that gets set as both argv[0] AND argv[1].
      
      Reviewed By: xavierd
      
      Differential Revision: D21190350
      
      fbshipit-source-id: eeb95084592d30a028a93b2b03877f8cc6c72729
      b2003abb
    • Wez Furlong's avatar
      GH actions: fixup boost windows environment (#1359) · fca12003
      Wez Furlong authored
      Summary:
      The environment changed since I tested  D20740410 and now it appears
      that we'll need to re-export a versioned variable in order for cmake
      to detect boost on the GH actions hosts.
      Pull Request resolved: https://github.com/facebook/folly/pull/1359
      
      Test Plan:
      the GH actions status of this diff.
      
      The workflow was updated via:
      
      ```
      python3 build/fbcode_builder/getdeps.py generate-github-actions folly --output-file .github/workflows/main.yml
      ```
      
      Reviewed By: yfeldblum
      
      Differential Revision: D21307640
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 1555cbcade822775379cd9054be37fdbc17b4d93
      fca12003