1. 09 Aug, 2018 12 commits
    • Orvid King's avatar
      Adjust the constexpr strlen implementation to handle up to 4kb strings · 88ab460c
      Orvid King authored
      Summary:
      Previously it was only capable of handling 512 byte strings under MSVC due to the constexpr recursion depth limit being 512 by default under MSVC.
      In the future once we have C++14 constexpr everywhere, this should just be a for loop, which should remove the limit.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9230717
      
      fbshipit-source-id: 88bcf0ef94b200301eb41392482e910b2e8de008
      88ab460c
    • Lee Howes's avatar
      Add deprecation of l-value form of Future<T>::then() · 3795f900
      Lee Howes authored
      Summary:
      Separates l-value and r-value versions of parameterless then.
      
      Deprecates l-value version.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9222345
      
      fbshipit-source-id: 3dd95b3e35bf1b06d426334c30150b049a5e0b70
      3795f900
    • Mikhail Karasikov's avatar
      throw std::bad_alloc if memory can't be allocated (#888) · e34ba846
      Mikhail Karasikov authored
      Summary:
      Bug fix: call `reserve()` trying to allocate more memory than available
      Pull Request resolved: https://github.com/facebook/folly/pull/888
      
      Reviewed By: ot
      
      Differential Revision: D9234444
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 4d12236aee745ad663d95a370d273f619f92b1bd
      e34ba846
    • Adam Simpkins's avatar
      RequestContext: fix segfaults in the tests · c4fca6d0
      Adam Simpkins authored
      Summary:
      Update all of the RequestContext tests to use a test fixture that helps ensure
      they all start from a consistent state.
      
      Otherwise tests can end up running with RequestContxt settings left over from
      previous test functions, which can affect their results.
      
      In particular, several tests leave behind data for the "test" key.  This
      causes subsequent calls to `setContextData()` to not actually set new data for
      this key, but to instead reset its value to null.  This would cause many tests
      to segfault since they did not check if `getContextData()` returned null
      before dereferencing the result.
      
      Reviewed By: yfeldblum, A5he
      
      Differential Revision: D9233617
      
      fbshipit-source-id: ce7a7c738592305f01b16fec7796505ea192ede4
      c4fca6d0
    • Adam Simpkins's avatar
      cmake: fix issues in the FindGMock module · 7d4c2a9b
      Adam Simpkins authored
      Summary:
      - Fix the variable name passed to FIND_PACKAGE_HANDLE_STANDARD_ARGS() so that
        it matches the module name (`FindGMock.cmake`).  This makes sure that the
        failure is detected correctly if GMock is not found.
      - googletest depends on pthreads, so use `find_package(Threads)` and add
        `Threads::Threads` to the list of required library dependencies.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9212536
      
      fbshipit-source-id: eae6220a2dbfe777bff1ac0ee0fb4df53de16955
      7d4c2a9b
    • Adam Simpkins's avatar
      cmake: use the built-in FindThreads module · f09065c9
      Adam Simpkins authored
      Summary:
      Use CMake's built-in FindThreads module rather than having our own custom
      FindPThread.cmake module.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9212535
      
      fbshipit-source-id: 9a652c510cb310c18547d31bd8215dedd8532a4c
      f09065c9
    • Adam Simpkins's avatar
      cmake: fix detection of dwarf.h · 48d6f314
      Adam Simpkins authored
      Summary:
      Ubuntu 18.04 (and presumably other Debian-based distributions) install
      dwarf.h at /usr/include/libdwarf/dwarf.h.  However other platforms like Mac
      typically install dwarf.h directly inside include/ without a libdwarf
      subdirectory.
      
      Commit e66fb34c previously changed the code to look only for "dwarf.h" to
      support Homebrew installations of dwarfutils on Mac, but accidentally broke
      finding dwarf.h on Ubuntu in the process.  This change should hopefully work
      on both platforms.
      
      Fixes: #905
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9212428
      
      fbshipit-source-id: a4520a47718a2da25e597ac7350344931ba21634
      48d6f314
    • Yedidya Feldblum's avatar
      Import Policy members into F14Table · 4fcdaf5c
      Yedidya Feldblum authored
      Summary: [Folly] Import `Policy` members into `F14Table` to deduplicate repeated uses of `Policy::`.
      
      Reviewed By: shixiao
      
      Differential Revision: D9176546
      
      fbshipit-source-id: bbd32a17cca7d38b3e5d55c1840353821f4e2ddc
      4fcdaf5c
    • Dan Melnic's avatar
      Add thread cached ints benchmark · dd624c5e
      Dan Melnic authored
      Summary: Add thread cached ints benchmark
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9212949
      
      fbshipit-source-id: 552aab15e7421f74b5cec3ce4abd211ab3141153
      dd624c5e
    • Eric Niebler's avatar
      don't slice std:: exceptions in exception_wrapper::handle when no handler is found · 1d883868
      Eric Niebler authored
      Summary:
      Given an exception_wrapper `ew` holding a `std::runtime_error`, the following assertion fails:
      
      ```
      try {
        ew.handle();
      } catch( std::runtime_error const & ) {
      } catch( std::exception const & ) {
        assert(false);
      }
      ```
      
      Reviewed By: simpkins
      
      Differential Revision: D9199924
      
      fbshipit-source-id: b6f90ccf269a1b58f0dd07723451ff34cde1d529
      1d883868
    • Victor Zverovich's avatar
      Fix building of folly/compression with modules · be5070bf
      Victor Zverovich authored
      Summary: Move the definition of the `ZSTD_STATIC_LINKING_ONLY` and `ZDICT_STATIC_LINKING_ONLY` macros from code to the target to fix the modular build. It is needed because these macros affect the public API of `zstd.h`.
      
      Reviewed By: terrelln
      
      Differential Revision: D9189720
      
      fbshipit-source-id: efacc1456803900fd65159a43cf1fba2daf15673
      be5070bf
    • Fred Emmott's avatar
      Flush secureRandom buffer on fork · 8e927ee4
      Fred Emmott authored
      Summary: On fork, flush the secureRandom buffer, so that we don't share entropy between the parent and child.
      
      Reviewed By: ricklavoie
      
      Differential Revision: D9196474
      
      fbshipit-source-id: 12ff8488d814466186df61328a5f1d4000beb27f
      8e927ee4
  2. 08 Aug, 2018 12 commits
    • Aaryaman Sagar's avatar
      Print benchmark results as they complete · 173b48d4
      Aaryaman Sagar authored
      Summary:
      Print benchmark results as and when they complete instead of outputting the
      whole thing once at the end
      
      Reviewed By: djwatson, ot
      
      Differential Revision: D9177038
      
      fbshipit-source-id: 54898b303771f214c21163cd87b11f8e2083cdf4
      173b48d4
    • Sven Over's avatar
      fix `folly::via` for callables returning SemiFuture · ab24ce0c
      Sven Over authored
      Summary:
      When passing a callable to `folly::via` that returns a SemiFuture,
      via should return a Future. The implementation does the correct thing
      but the declaration's return type is not correct. This diff fixes that.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9219041
      
      fbshipit-source-id: e61544231e7846c713ff43394c3bf5d1aae18233
      ab24ce0c
    • Lee Howes's avatar
      Fix for lifetime bug in retrying. · 1d3ee8c5
      Lee Howes authored
      Summary: Late change in D9175807 removed necessary temporaries. This caused a lifetime management problem for GCC.
      
      Reviewed By: Orvid
      
      Differential Revision: D9227937
      
      fbshipit-source-id: d5fea8a98855c6302189a7dee8cd5862d13a63a3
      1d3ee8c5
    • Marshall Cline's avatar
      Perf improvement of folly::Future's map() · 7ef79a5f
      Marshall Cline authored
      Summary: folly::Future's map() functions create a std::vector<Future<...>>, then use push_back to populate that vector. This could result in reallocations. Avoid that by reserving proper space ahead of the push_backs.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9204713
      
      fbshipit-source-id: 51d9154f483a47c6196a4d4d9d4af14e4eeab6e0
      7ef79a5f
    • Caleb Marchent's avatar
      Include Symbolizer in Folly CMake build · f0939c67
      Caleb Marchent authored
      Summary: autotools-based builds are being deprecated, but they lack the symbolizer library target.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9216312
      
      fbshipit-source-id: 585ce3c43a0800823c7de4ece99b56a1af82bae4
      f0939c67
    • Lee Howes's avatar
      R-value qualify Future<T>::then and deprecate lvalue. · 64eaa718
      Lee Howes authored
      Summary:
      Overall plan to modify Future<T>::then to be r-value qualified and use Future<T>::thenTry or Future<T>::thenValue.
      
      The goal is to disambiguate folly::Future and to improve type and lifetime safety of Future and its methods.
      
       * Deprecate l-value qualified calls to Future<T>::then.
       * Make appropriate changes to folly to make this correct without local deprecation warnings.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9175807
      
      fbshipit-source-id: 9dc9812270ca3fb800f3a56d3aef8ef3d1d209e6
      64eaa718
    • Yedidya Feldblum's avatar
      Dead Code: folly/experimental/symbolizer/ElfUtil.cpp · 8f17118c
      Yedidya Feldblum authored
      Summary: [Folly] Dead Code: `folly/experimental/symbolizer/ElfUtil.cpp`.
      
      Reviewed By: calebmarchent
      
      Differential Revision: D9218592
      
      fbshipit-source-id: e231852c068eb797c7c3a4a3955fefc38e4be2fc
      8f17118c
    • Caleb Marchent's avatar
      Back out "[folly][PR] [CMake] Generalize include path for dwarf.h" · b4c37821
      Caleb Marchent authored
      Summary:
      Original commit changeset: 6b5faf000e5f
      
      Breaks builds on Ubuntu Bionic, effectivly undoing the work of D3878961.
      Note: both autotools and CMake builds incorrect on Bionic, its just that
      autotools build fails explicitly where CMake fails silently; failing to
      detect a correctly installed libdwarf headers. The difference being that
      CMake does not build symbolizer.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9194639
      
      fbshipit-source-id: c6798a0672195a70ced4898535f2f932018224d5
      b4c37821
    • Marc Celani's avatar
      Sort the digest after merge to deal with floating point accuracy · 24024c41
      Marc Celani authored
      Summary: When merging centroids together, we recalculate the mean and weight. This can sometimes lead to inaccuracy due to floating point arithmetic. In a bad scenario, this can actually lead to the digest being unsorted, which triggers assertions in the code. To fix this, sort the digest at the end of merge. Since this is bounded to 100 elements that are mostly sorted, this appears to be cheap according to benchmarks.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9213936
      
      fbshipit-source-id: 5a2978a1b759b70206aef57245bef193aed65efd
      24024c41
    • Tingzhe Zhou's avatar
      Improve blocking and accuracy · de95d5f9
      Tingzhe Zhou authored
      Summary:
      Blocking algorithm:
       Push:
      1.  push
      2.  increase the PTicket number
      3.  put (PTicket << 1) to the corresponding place in futex array.
      4.  if the original  futex value & 1  == 1,  wake up ()
      
      Pop:
      1.  increase the CTicket number
      2.  spin if the corresponding CTicket futex is not ready
      3.  set the right bit of the CTicket futex  to 1, wait on it.
      4. pop
      
      Add additional control to improve the accuracy:
      For the top several levels (top 0 - 3 levels by default), it does not arbitrarily insert any node in the middle of the list. Thus guaranteeing no later coming lower priorities can be insert at the top levels (pruning strategy still valid for the top four levels). For the bottom levels (start from level 7 by default), if insertion requires to hold parent + child locks, it traverses the parent list to check whether the parent list has lower priority nodes than the new node. If the condition holds, insert the new node to the parent and get the last node in the parent list and insert it to the child list.
      
      Reviewed By: magedm
      
      Differential Revision: D9094903
      
      fbshipit-source-id: fa4d31fb0c21da746570029e0e3b4b3fbeaa2024
      de95d5f9
    • Matthieu Martin's avatar
      Request context: optimize exec_set_difference · 7f721452
      Matthieu Martin authored
      Summary: This code is hot enough that this might matter. Though likely over-optimization.
      
      Reviewed By: djwatson
      
      Differential Revision: D9197636
      
      fbshipit-source-id: d9e2a90410c03a73d1754d99c72967f5dcd96c0f
      7f721452
    • Matthieu Martin's avatar
      RequestContext: replace F14FastMap by std::unordred_map · 6c822a8a
      Matthieu Martin authored
      Summary: Production data shows that it performs significantly worse under common RequestContext load (few elements, clang lto compiled).
      
      Reviewed By: djwatson
      
      Differential Revision: D9182929
      
      fbshipit-source-id: 0c638268d9b6cd2451b48ccc4e228faf90f0e18e
      6c822a8a
  3. 07 Aug, 2018 10 commits
    • Alex Guzman's avatar
      Add support for building from facebookincubator repos · e0d38a26
      Alex Guzman authored
      Summary: Currently, fbcode_builder assumes you're building code living in the facebook github org. If you try to do travis builds using a facebookincubator repo, an error occurs due to hard-coded assumptions about the org. This fixes that
      
      Reviewed By: knekritz
      
      Differential Revision: D9183307
      
      fbshipit-source-id: 0a1ac399953485e84f0534cc0616765227088c80
      e0d38a26
    • Lee Howes's avatar
      Missed l-value calls to future::then in Benchmark.cpp · b8e842cf
      Lee Howes authored
      Summary:
      Overall plan to modify Future<T>::then to be r-value qualified and use Future<T>::thenTry or Future<T>::thenValue. The goal is to disambiguate folly::Future and to improve type and lifetime safety of Future and its methods.
      
      Add a std::move that was missed in the folly benchmark.
      
      Reviewed By: shixiao
      
      Differential Revision: D9197265
      
      fbshipit-source-id: d02ab7b0dc22f6465910a80b2d0af1b54fb7bde7
      b8e842cf
    • Harsh Poddar's avatar
      Add function name property to LogMessage · 980baaf5
      Harsh Poddar authored
      Summary: This update adds the name of the function which called the LOG() to the `LogMessage` object so that a custom formatter could use it to show method name with logs.
      
      Reviewed By: simpkins
      
      Differential Revision: D9071926
      
      fbshipit-source-id: 9d5359d84cf2544371c6f1826f99d8b47a272dd1
      980baaf5
    • Xiao Shi's avatar
      use `to<std::string>` instead of `to_string` for android compatibility · daf5e5df
      Xiao Shi authored
      Summary:
      Apparently certain Android NDK does not support numeric conversion functions of
      `basic_string`. Use folly/Conv instead.
      
      Changes generated by `%s/std::to_string/to<std::string>/g`.
      
      In addition, Android SDK's treatment of `long double` is inconsistent. Avoid
      that in the tests for now.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9196009
      
      fbshipit-source-id: 54a32c426a4beb6a0e2d7f95d6b30bf6d7cc67cf
      daf5e5df
    • Misha Shneerson's avatar
      short-circuit connection callbacks onto same thread · cd09aea8
      Misha Shneerson authored
      Summary:
      When we have a single thread handling both connections and requests, we end up
      call the accept callback on the same thread. The code handling the
      incoming connections does intend to short-circuit such connection
      and not place them on EventBase's queue but it only checks only whether there is no
      EventBase registerd for the accept callback. However, by default, we are
      registering an EventBase for this callback so this short-circuit falls short
      (yay puns).
      
      Reviewed By: djwatson
      
      Differential Revision: D8986246
      
      fbshipit-source-id: 45b817669ae4fd908b39c93ae5b82bb9a14cc2ed
      cd09aea8
    • Dave Watson's avatar
      Initialize call_ and exec_ in move constructor · a4ef724b
      Dave Watson authored
      Summary: It's only two stores, but for move that ends up being a large percentage of the work it has to do.  Add initializers in the move constructor, so that we don't both default-initialize and then swap() inline.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8678422
      
      fbshipit-source-id: 71b574145182ad3a4a3e9d0d824d83abe65fb6fa
      a4ef724b
    • Marc Celani's avatar
      TDigest handles crazy outliers · 5c02ae45
      Marc Celani authored
      Summary: The algorithm in the TDigest paper does not handle weird outliers very well. This diff changes the clamp logic to clamp between the prev and next centroids rather than min_ and max_. This gives much better results.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9192686
      
      fbshipit-source-id: 171a7b7db5552802f91e6e95bb541a1b03c8821d
      5c02ae45
    • Victor Zverovich's avatar
      Fix includes in FingerprintPolynomial.h · 7659f9ba
      Victor Zverovich authored
      Summary:
      Add a missing include in `folly/detail/FingerprintPolynomial.h` to fix the
      modular build.
      
      Reviewed By: andrewjcg
      
      Differential Revision: D9182707
      
      fbshipit-source-id: c498b10bd02f6528a62fce8145521a97755d6496
      7659f9ba
    • Matthieu Martin's avatar
      Remove map/set import from folly Request.h · ad98d099
      Matthieu Martin authored
      Summary: We have a surprisingly high number of unrelated dependencies on those 2 imports
      
      Reviewed By: djwatson
      
      Differential Revision: D9155350
      
      fbshipit-source-id: e85e42934af8378cdc0db909d8a6afacb504df8f
      ad98d099
    • Andrii Grynenko's avatar
      Make fiber backtrace include the code which activated the fiber · 4bb09774
      Andrii Grynenko authored
      Reviewed By: yfeldblum, palmtenor
      
      Differential Revision: D9144908
      
      fbshipit-source-id: 6201a4beaf1e2d2cf16c8e3986097a6e8e47c6f3
      4bb09774
  4. 06 Aug, 2018 2 commits
  5. 05 Aug, 2018 3 commits
  6. 04 Aug, 2018 1 commit