1. 13 Jun, 2018 9 commits
    • Yedidya Feldblum's avatar
      Use a simpler atomic state in Futures Core · cd498c15
      Yedidya Feldblum authored
      Summary:
      [Folly] Use a simpler atomic state in Futures `Core` v.s. `FSM` which abstracts an atomic state plus a spin-lock.
      
      The `FSM` abstraction can be useful in more complex cases, but is not needed in the current case. All that is needed is a single barrier state, which is `Done` - setting callback and result happen before state transitions to `Done`, while invoking callback with result happens after state transitions to `Done`.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8083703
      
      fbshipit-source-id: 42d96b41cbdac5e7c42f3f8a661d5db3113655db
      cd498c15
    • Yedidya Feldblum's avatar
      Use terminate_with in Futures Core invalid transitions · f7f840c3
      Yedidya Feldblum authored
      Summary:
      [Folly] Use `terminate_with` in Futures `Core` invalid transitions.
      
      Both `Promise` and `Future` check state validity before calling the `Core` transition methods and throws in invalid state. So `Core` no longer needs to throw and may terminate instead.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8346113
      
      fbshipit-source-id: 9ff158673149096789b29544453262797b06d441
      f7f840c3
    • Yedidya Feldblum's avatar
      folly::terminate_with · a711f13b
      Yedidya Feldblum authored
      Summary: [Folly] `folly::terminate_with`, to terminate as if by forwarding to `folly::throw_exception` but in a `noexcept` context.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8345962
      
      fbshipit-source-id: bc5cf5d3a3e1f085dd2989c940a6ea753a520cbf
      a711f13b
    • Yedidya Feldblum's avatar
      Let Future check before adding a continuation · 1e13bc0f
      Yedidya Feldblum authored
      Summary:
      [Folly] Let Future check before adding a continuation whether a continuation has already been added.
      
      Requires making wait behave more like timed-wait; alternatively, it would be possible to add a reverse state transition, but there seems not to be a need.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8344923
      
      fbshipit-source-id: f077fb4b83b92c96af9a83e1b1479c4cb41b048a
      1e13bc0f
    • Yedidya Feldblum's avatar
      Range explicit conversion to any · 24d559b8
      Yedidya Feldblum authored
      Summary:
      [Folly] `Range` explicit conversion to any target type, with overloads enabled only for target types which are explicitly constructible from two iterators.
      
      Also changes `Range::to` to do similar, but permits additional arguments to be forwarded as trailing arguments to the target type constructor.
      
      For example, this makes `std::string`, `folly::fbstring`, `std::vector<char>`, and all variants with default-constructible custom allocators, to be constructible from (but not convertible from) `folly::StringPiece`.
      
      Reviewed By: nbronson
      
      Differential Revision: D8386240
      
      fbshipit-source-id: 2426191d1c8ac71cd5832f784e83bbe09b8716e7
      24d559b8
    • Michael Bolin's avatar
      Add task ID for TODOs about log rotation. · 074433f1
      Michael Bolin authored
      Summary:
      There were two TODOs that I knew of in fbcode about this, so I decided to file
      a task so we can track it.
      
      Reviewed By: simpkins
      
      Differential Revision: D8176921
      
      fbshipit-source-id: 0ca45620050639659ac038dbed43acf4634f7a1d
      074433f1
    • Michael Park's avatar
      Added `SemiFuture::delayed` · 301a89b5
      Michael Park authored
      Summary:
      Added `FutureBase::delayedImplementation`. Kept the existing semantics of
      `Future::delayed` and `Future::delayedUnsafe`. `SemiFuture::delayed` uses
      the inline executor which means we could execute our trivial lambda on
      the `Timekeeper` thread. However we ultimately return a `SemiFuture`,
      so we're not necessarily on the hook to execute an arbitrarily complex
      continuation.
      
      NOTE: This is still possible if the user explicitly specifies
      `.via(inline_executor)`. Perhaps we should consider disallowing, or maybe linting for this.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8372515
      
      fbshipit-source-id: e660dbf2a2bb084e11c5e57d1badacf09425f939
      301a89b5
    • Alfredo Altamirano's avatar
      Support constructing TDigest from centroids and getting centroids from TDigest · 856466e2
      Alfredo Altamirano authored
      Summary:
      To implement tdigest aggregation in scuba, we need to be able to deserialize and serialize the digests.
      I added a getter for the centroids so that we can serialize the tdigest, and added a constructor to create one from the list of centroids.
      
      Last diff was reverted because of a build error :(
      We were seeing an error only in opt mode because it's an error in gcc but not in clang.
      
      Differential Revision: D8381617
      
      fbshipit-source-id: 768a12795aeb02737eb9b060f80d01608685c91d
      856466e2
    • Aaryaman Sagar's avatar
      assert the presence of the KeepAlive functionality with VirtualExecutor · f2c8ffe5
      Aaryaman Sagar authored
      Summary: title
      
      Reviewed By: yfeldblum, andriigrynenko
      
      Differential Revision: D8386575
      
      fbshipit-source-id: c900c8692b10004f2d9fbd95fa8ca96b3b8517d2
      f2c8ffe5
  2. 12 Jun, 2018 5 commits
    • Yedidya Feldblum's avatar
      Skip trivial-copyability Expected expectations under gcc49 · 925aeb00
      Yedidya Feldblum authored
      Summary:
      [Folly] Skip trivial-copyability `Expected` expectations under gcc49.
      
      The focus is on gcc5+; all that is needed for now is to keep code compiling with gcc49, but not necessarily to ensure optimal trivial-copyability behavior.
      
      Reviewed By: Orvid
      
      Differential Revision: D8364392
      
      fbshipit-source-id: b0062193c844509b6bf26ed632dd8e5d4bdf77d2
      925aeb00
    • Igor Sugak's avatar
      remove UNDEFINED_SANITIZER use · 544a8c33
      Igor Sugak authored
      Summary: Assume, when UBSAN is used, it is always used on top of ASAN.
      
      Reviewed By: luciang
      
      Differential Revision: D8360231
      
      fbshipit-source-id: 3106cfa53567b18f199e9303ea4c14a464ff03cc
      544a8c33
    • Alex Guzman's avatar
      Pull sodium fbcode_builder spec out · dc6ade21
      Alex Guzman authored
      Summary: Makes a spec for libsodium.
      
      Reviewed By: knekritz
      
      Differential Revision: D8228801
      
      fbshipit-source-id: 18f623bce0bbc07f711129b15b78d56b6c852bf7
      dc6ade21
    • Yedidya Feldblum's avatar
      A cache for InlineExecutor singleton · c7d8ba07
      Yedidya Feldblum authored
      Summary: [Folly] A cache for `InlineExecutor` singleton, which can be inlined into callers with little extra code compared to calling the backing function directly.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8339793
      
      fbshipit-source-id: d2be0128e617cfefe66809eb44ce40e1a8ae2dfb
      c7d8ba07
    • Yedidya Feldblum's avatar
      Write Promise::setException in terms of Promise::setTry · 3dd9d51b
      Yedidya Feldblum authored
      Summary: [Folly] Write `Promise::setException` in terms of `Promise::setTry`.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8344928
      
      fbshipit-source-id: 90e21219f054329eca7ae1a6c2ca731a16328b6f
      3dd9d51b
  3. 11 Jun, 2018 5 commits
  4. 09 Jun, 2018 4 commits
    • Yedidya Feldblum's avatar
      A shorter name for executor local variable in Future methods · 467571e4
      Yedidya Feldblum authored
      Summary:
      [Folly] A shorter name for executor local variable in `Future` methods. Reads more nicely, with less awkward formatting.
      
      When the scope of a local variable's use is just a few lines, long names are not quite so critical.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8339451
      
      fbshipit-source-id: 5d50cf0ce3473c1a79afeeddb9e1257cccf73e31
      467571e4
    • Yedidya Feldblum's avatar
      No need for qualifying InlineExecutor in Futures · ac16a6fc
      Yedidya Feldblum authored
      Summary: [Folly] No need for qualifying `InlineExecutor` in `Futures` - they are both in `namespace folly` already.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8307058
      
      fbshipit-source-id: 17a0ecde1e57f1c0c88cbac09bbd1bb3daf7a24e
      ac16a6fc
    • Yedidya Feldblum's avatar
      Use InlineExecutor singleton in Future wait · 2b4f07ee
      Yedidya Feldblum authored
      Summary:
      [Folly] Use `InlineExecutor` singleton in `Future` wait v.s. letting the executor be `nullptr`.
      
      The effect is the same, but just more explicit.
      
      Reviewed By: marshallcline
      
      Differential Revision: D8306902
      
      fbshipit-source-id: fc90704de670b1ca9956253383fadad3be297847
      2b4f07ee
    • Andrii Grynenko's avatar
      VirtualExecutor · fc75fc56
      Andrii Grynenko authored
      Summary:
      Executor adaptor which allows joining only tasks scheduled through this VirtualExecutor instance without joining all other tasks in a wrapped Executor.
      This is very similar to VirtualEventBase, but works for any Executor.
      
      Reviewed By: yfeldblum, aary
      
      Differential Revision: D8342064
      
      fbshipit-source-id: 420b6390e2da88c4826e6d22bc8f3b3585525214
      fc75fc56
  5. 08 Jun, 2018 7 commits
    • Yedidya Feldblum's avatar
      Ensure sleep duration in logging RateLimiter test · 12e65c2d
      Yedidya Feldblum authored
      Summary: [Folly] Ensure sleep duration in logging `RateLimiter` test to make sure that there is no chance of waking up from the sleep too early.
      
      Reviewed By: Orvid
      
      Differential Revision: D8330018
      
      fbshipit-source-id: f1222e1da50f8360267f9e1c5e0f24897b7b8f47
      12e65c2d
    • Nathan Bronson's avatar
      clang-format in preparation for changes · 51196c8d
      Nathan Bronson authored
      Reviewed By: shixiao
      
      Differential Revision: D8333485
      
      fbshipit-source-id: 02f74700272b663474c2f02535265ffb6f4bcd22
      51196c8d
    • Marshall Cline's avatar
      add method-level contracts to SemiFuture & Future · 9d6a5522
      Marshall Cline authored
      Summary:
      method-level contracts
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8132350
      
      fbshipit-source-id: d79b1d88a38ea97de8d0e841e822805aff3959ae
      9d6a5522
    • Saif Hasan's avatar
      Fix oss build · 71bfdd3e
      Saif Hasan authored
      Summary:
      fbthrift needs to link against newer version of krb5 library to avoid linking
      issue during OpenR build.
      
      ```
      libsecurity.so: undefined reference to `error_message(long)'
      ```
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8330387
      
      fbshipit-source-id: 34f3f7361c99bb38adf558a52ef05e9d3156640d
      71bfdd3e
    • Tingzhe Zhou's avatar
      FlatCombiningPriorityQueue: Add interface · 12342f02
      Tingzhe Zhou authored
      Summary:
      Make the interface consistent with the other queue algorithms.
      push
      try_push
      try_push_for
      try_push_until
      pop
      try_pop
      try_pop_for
      try_pop_until
      peek
      try_peek
      try_peek_for
      try_peek_until
      
      Reviewed By: yfeldblum, djwatson
      
      Differential Revision: D8262170
      
      fbshipit-source-id: 0299e947a0069eacafd1315c920ec6e1b36675f3
      12342f02
    • Andrii Grynenko's avatar
      Implement weak reference for DefaultKeepAliveExecutor · 2825daef
      Andrii Grynenko authored
      Summary: Weak reference can be used if it's ok for some tasks to be dropped when Executor is destroyed.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8309958
      
      fbshipit-source-id: 8ecc86a8be181a9eb695aa12305b2a30b6f4b60e
      2825daef
    • Michael Park's avatar
      Added `SemiFuture::within` · bba17c09
      Michael Park authored
      Summary:
      Moved `Future::within` to `FutureBase::withinImplementation`, and changed it to return a `SemiFuture`.
      `SemiFuture::within` uses it directly, and `Future::within` uses it then attaches the current executor or falls back to the inline executor to preserve existing behavior.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8269907
      
      fbshipit-source-id: 76e235a2ecb2c648603961d0ac0ac17bf646d027
      bba17c09
  6. 07 Jun, 2018 3 commits
    • Yedidya Feldblum's avatar
      Support self-copy in small_vector · a1dd1ce6
      Yedidya Feldblum authored
      Summary:
      [Folly] Support self-copy in `small_vector`.
      
      And refactor move-assignment to look like the fixed copy-assignment for symmetry.
      
      Reviewed By: Ahmed-Salama
      
      Differential Revision: D8321122
      
      fbshipit-source-id: 2c8b26ad6c4e538266082df29276b827cf4505fc
      a1dd1ce6
    • Xiao Shi's avatar
      EASY: fix small bug in fallback F14 visitAllocationClasses · e1df88af
      Xiao Shi authored
      Summary: When vector intrinsics are not available, `visitAllocationClasses` fails to compile as it is a member function of a template class and it invokes a member function of a template base class without explicit `this->`.
      
      Reviewed By: yfeldblum, nbronson
      
      Differential Revision: D8300168
      
      fbshipit-source-id: 1c1619bd1c864535648e531b218d2cf1ffef767b
      e1df88af
    • Alexander Blom's avatar
      Make AsyncSocket spam logs less · 1bc8c91c
      Alexander Blom authored
      Summary:
      VLOG(1) shows up in Android logs, which is annoying as some of our
      tools try to repeatedly connect.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8297987
      
      fbshipit-source-id: 45cf4320d2e2fcf570117fee6aef133b2d9986e6
      1bc8c91c
  7. 06 Jun, 2018 4 commits
    • Caleb Marchent's avatar
      Look for tags along the master branch checkout out Zstd · 99082ae3
      Caleb Marchent authored
      Summary:
      There is no guarantee that the default branch in git is 'master'; so
          unless specified we checkout a tag along the 'dev' branch, which is not
          intended as it is the master branch that tracks releases for Zstd.
      
      Reviewed By: jstrizich
      
      Differential Revision: D8297843
      
      fbshipit-source-id: 8497dc75c399ae7c86e27b28fdb73898ef4b1a4e
      99082ae3
    • Michael Park's avatar
      Minor comment fix and a couple of typos · f2319a6c
      Michael Park authored
      Summary: `s/Future/SemiFuture/` on `SemiFuture` ctor and fixed typo `s/Timeekeeper/Timekeeper/`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8290658
      
      fbshipit-source-id: 99ddbdecc0302e620bd2b4ebce74c6080cf81aec
      f2319a6c
    • Lee Howes's avatar
      Make Future<T>::delayed complete on correct executor 5/n: Add back... · ed88a3a3
      Lee Howes authored
      Make Future<T>::delayed complete on correct executor 5/n: Add back Future::delayed with correct behaviour
      
      Summary:
      Overall plan to modify Future<T>::delayed to complete on the same
      executor as the input future.
      
      [folly::Futures] Make Future<T>::delayed complete on correct executor 5/n:
       * Add back future::delayed.
       * Have Future::delayed complete on input executor.
       * r-value qualify Future::delayed
      
      Reviewed By: yfeldblum, marshallcline
      
      Differential Revision: D8238220
      
      fbshipit-source-id: 79afa8cc9a9fe588609ad186ad62f714ee322f7d
      ed88a3a3
    • Yedidya Feldblum's avatar
      Let Sychronized move-constructor not lock the source · 36502346
      Yedidya Feldblum authored
      Summary: [Folly] Let `Sychronized` move-constructor not lock the source object, since it is an rvalue-reference and the move-constructor code may therefore be assumed to have the only live reference to the source. Same with the move-assignment operator.
      
      Reviewed By: aary
      
      Differential Revision: D8219883
      
      fbshipit-source-id: f62ff87197ac4b9ceed290a73a05062ab8ed45c4
      36502346
  8. 05 Jun, 2018 3 commits
    • Felix Handte's avatar
      Init on First Use and Retain LZ4F Contexts · 8acd0060
      Felix Handte authored
      Summary:
      Reusing a context can provide significant efficiency benefits.
      
      Depends on D8172871.
      
      Reviewed By: yfeldblum, terrelln
      
      Differential Revision: D8287767
      
      fbshipit-source-id: 2565e7a959b2ac0911f0a4d6e1596f9da6d12ee8
      8acd0060
    • Felix Handte's avatar
      Init on First Use and Retain LZ4 Contexts · 5b5e8e88
      Felix Handte authored
      Summary:
      Reusing a context can provide significant efficiency benefits.
      
      Depends on D8172801.
      
      Reviewed By: yfeldblum, terrelln
      
      Differential Revision: D8172871
      
      fbshipit-source-id: f92c85410a35643502d28922583ee0ed0b4386c9
      5b5e8e88
    • Neel Goyal's avatar
      Clear errors when reading pems · f1e3312e
      Neel Goyal authored
      Summary: Clear/read OpenSSL errors after certain ops.
      
      Reviewed By: mingtaoy
      
      Differential Revision: D8277088
      
      fbshipit-source-id: aa436657c3bca3a081cd56858e09da57a03cda05
      f1e3312e