1. 01 Aug, 2020 1 commit
    • Yedidya Feldblum's avatar
      Avoid std::forward in folly/futures/ · c5cff936
      Yedidya Feldblum authored
      Summary: [Folly] Avoid `std::forward` in `folly/futures/` since function template instantiation is expensive at compile time and `std::forward` is, when used correctly, nothing more than library sugar for straightforward syntax.
      
      Reviewed By: LeeHowes
      
      Differential Revision: D22673234
      
      fbshipit-source-id: f88bc8c8aa13797ae6eccf1a421a47ff135589e1
      c5cff936
  2. 31 Jul, 2020 6 commits
    • Nathan Bronson's avatar
      suggest race condition to users that trip F14's internal checks · 28da027e
      Nathan Bronson authored
      Summary:
      Some of the CHECKs and DCHECKs in F14 are often tripped by users
      that write to an F14 map or set from multiple threads without proper
      concurrency control.  This diff adds a message to those locations that
      suggests that they may have a race condition.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22826369
      
      fbshipit-source-id: 8d5e96feea4dbb8dda404980d9a9d3412fb2eb64
      28da027e
    • Robin Cheng's avatar
      Attempt to fix a race condition in ThreadLocal related to ThreadEntryNode. · 2fb430a3
      Robin Cheng authored
      Summary:
      See task T70610458 description for the TSAN error reported.
      
      The scenario that can trigger this race condition is:
       * Thread A has a ThreadEntryNode N whose `next` points to thread B's ThreadEntry.
       * Thread B exits, which causes it to delete its ThreadEntry and all its nodes; therefore writing `N->next = <the next entry after B>`.
       * At the same time, thread A accesses the thread local corresponding to N; when checking whether the ThreadEntryNode is already added to the linked list, it checks whether the `next` pointer is null; this read races with the above write.
      
      Even though this is a technically a race condition, it is unlikely to actually trigger any negative effect in practice, because at thread exit, the overwrite of `N->next = ...` will never assign a nullptr, so it will never affect the outcome of `if (!next)` in thread A. Only the thread that owns the ThreadEntryNode has the ability to change between `next == nullptr` and `next != nullptr`. (The former is called "zero" in the code). Nonetheless, C++ says "race condition leads to undefined behavior", so it's still good to fix...
      
      It's not clear what the best way to fix this is. Here I've presented one fix, which is to introduce another field in ThreadEntryNode that is private to the thread and simply indicates whether the node is zero; this field is strictly accessed by only the owning thread and therefore will not cause a race condition. I used a bit in `id` to not increase memory consumption, but maybe that's not important - I don't know. I'm also unsure about the performance implications.
      
      Let me know if anyone has different ideas; I'm very open to suggestions here.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22743031
      
      fbshipit-source-id: 12722ca241a224b546a0f6763b125e922813c844
      2fb430a3
    • Robin Cheng's avatar
      Fix race condition in //folly/test:synchronized_test due to sharing RNG on multiple threads. · eb493d16
      Robin Cheng authored
      Summary: Turned it into a thread_local instead. Only affects tests.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22744469
      
      fbshipit-source-id: cbe8263d560f5abad27c7e61b1963aecf090a94e
      eb493d16
    • Robin Cheng's avatar
      Fix a TSAN-detected race condition in TLRefCount. · ca49b1fe
      Robin Cheng authored
      Summary:
      See RefCountTest.cpp for a newly added test. When one thread is decrementing a local refcount and another thread is decrementing a global refcount, and the global decrement results in global zero, the second thread can reasonably expect to be able to safely destroy the refcount object. However, a memory ordering issue in LocalRefCount::collect() causes TSAN to detect a write-delete race condition on the inUpdate_ variable (though that variable is not the cause of the issue).
      
      This diff changes collect() to use memory_order_acquire so that upon reading false, collect() may exit while assuming that all memory accesses in update() are complete. This way, any memory accesses (such as a read of refCount_.state_ in update()) happen before a delete of the whole TLRefCount like so:
      
       - A memory access in update() is sequenced before the release store of false into inUpdate_ at the SCOPE_EXIT of the function,
       - which synchronizes with the acquire load at the end of collect()
       - which is sequenced before the deletion that can only happen after collect()
      
      Without this diff, the second relationship above is broken and TSAN complains.
      
      I also updated the comment on top of inUpdate_ to better reflect the purpose. I couldn't understand the original comment (which seems to suggest it's related to refcount *correctness* rather than a write-delete race), but maybe I missed something there.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22805717
      
      fbshipit-source-id: 34cf72676760526ba457f939e307ed03dc722528
      ca49b1fe
    • Misha Shneerson's avatar
      periodic timers should not cause leaking of folly::RequestContext · 030a288b
      Misha Shneerson authored
      Summary:
      we do have some periodic maintentenance tasks... if those are initialized
      lazily on a requests handling path, they  will capture current rctx and keep it
      it alive forever.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22859344
      
      fbshipit-source-id: 3655d874dee22aaf74b4d80631d4a58e83539752
      030a288b
    • Ajanthan Asogamoorthy's avatar
      -update-app-bytes-written-correctly · 0b2e2a2d
      Ajanthan Asogamoorthy authored
      Summary: AppBytesWitten was no longer updated correctly for AsyncSSLSocket, fix this.
      
      Reviewed By: bschlinker
      
      Differential Revision: D22847139
      
      fbshipit-source-id: 8cabb9883e5ad64c49a283a0d83b8087def4d5ae
      0b2e2a2d
  3. 30 Jul, 2020 4 commits
    • Zhengxu Chen's avatar
      Don't append space delimiter when context string is empty. · 2ee7489b
      Zhengxu Chen authored
      Summary:
      Currently when context string is "", we will still append whitespace to log header. This looks like:
      ```
      I0729 17:36:53.249270 438847 ThriftServerEventHandler.cpp:21 ] Sampling servers
      ```
      which is less readable compared to
      ```
      I0729 17:36:53.249270 438847 ThriftServerEventHandler.cpp:21] Sampling servers
      ```
      . Ideally empty context string should mean "there's no context string to report here", so we should not put an extra delimiter in such case.
      
      Reviewed By: simpkins
      
      Differential Revision: D22835634
      
      fbshipit-source-id: c7fc6de4036050eac3b7d16bf607c637d1394c44
      2ee7489b
    • Shai Szulanski's avatar
      Fix self-assignment in folly::coro::AsyncPipe · f9f5da22
      Shai Szulanski authored
      Reviewed By: yfeldblum
      
      Differential Revision: D22843001
      
      fbshipit-source-id: 55f48de90f16c53983ea94c8e1102c5b33e25195
      f9f5da22
    • Krzysztof Kozielczyk's avatar
      Add missing return in AsyncPipe move assignment operator · 10d69890
      Krzysztof Kozielczyk authored
      Summary:
      I'm using AsyncPipe heavily in D22593723. At one iteration I needed to assign with move a holding object and it wouldn't compile because the operator doesn't return any value
      
      Here's the error: `folly/experimental/coro/AsyncPipe.h:54:3: error: control reaches end of non-void function [-Werror,-Wreturn-type]`
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22593724
      
      fbshipit-source-id: 53f27b95c1dff0068a375291d4ee6f445f892dd9
      10d69890
    • Yedidya Feldblum's avatar
      Move an exception_ptr in exceptionStr · e050deab
      Yedidya Feldblum authored
      Summary: [Folly] Move an `exception_ptr` in `exceptionStr`, which should be ever-so-slightly cheaper than copying it since that may avoid atomic refcount operations. It's not much cheaper overall because the throw/catch machinery remains expensive.
      
      Reviewed By: ot, luciang
      
      Differential Revision: D22529858
      
      fbshipit-source-id: 7e5d4ec5c1ca601a766c63133ae759651ae7be85
      e050deab
  4. 29 Jul, 2020 6 commits
    • Yedidya Feldblum's avatar
      Outline exceptionStr function bodies · 0df06cbe
      Yedidya Feldblum authored
      Summary: [Folly] Outline `exceptionStr` function bodies and move them to the `.cpp`.
      
      Reviewed By: ot, luciang
      
      Differential Revision: D22529702
      
      fbshipit-source-id: 165c14009f224e86e63b3a3126c8b837cf3793f5
      0df06cbe
    • Yedidya Feldblum's avatar
      Skip the safe-assert dep on FileUtil · ab1c217f
      Yedidya Feldblum authored
      Summary: [Folly] Skip the safe-assert dep on FileUtil since it really needs only the combinators.
      
      Reviewed By: Orvid
      
      Differential Revision: D22699899
      
      fbshipit-source-id: 73485439e397c10210d09eacbb38116e3e0a50a0
      ab1c217f
    • Nathan Bronson's avatar
      fix F14 fallback build for modules · b37af6c5
      Nathan Bronson authored
      Summary:
      F14MapFallback.h and F14SetFallback.h can now be compiled
      standalone when F14 intrinsics are disabled.
      
      Reviewed By: andrewjcg, yfeldblum
      
      Differential Revision: D22785153
      
      fbshipit-source-id: 96a1d3b2773a83dee8484fa40f35bbc791aec57c
      b37af6c5
    • Yedidya Feldblum's avatar
      Drop support for boost below 1.61 · ddcb6ea2
      Yedidya Feldblum authored
      Summary: [Folly] Drop support for boost below 1.61, which means removing multiple versions of support for `boost-context` embedded in `folly/fibers/`.
      
      Reviewed By: fredemmott
      
      Differential Revision: D22779795
      
      fbshipit-source-id: fafc9b38784dcb206283e11d01d77dd8655354a6
      ddcb6ea2
    • Yedidya Feldblum's avatar
      Tweak safe-assert uses of wrapper functions · afdcebcc
      Yedidya Feldblum authored
      Summary: [Folly] Tweak safe-assert uses of wrapper functions.
      
      Reviewed By: nbronson
      
      Differential Revision: D22699636
      
      fbshipit-source-id: 97592e55f64f2e819680424c0f1ddd97e1f7b96c
      afdcebcc
    • Yair Gottdenker's avatar
      adding CANCELED to AsyncSocketExceptionType · 1c2dcb1d
      Yair Gottdenker authored
      Summary: adding CANCELED to AsyncSocketExceptionType
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22345735
      
      fbshipit-source-id: 73c61b409531d71a39d82a46d9c0ebc720801c45
      1c2dcb1d
  5. 28 Jul, 2020 11 commits
    • Harrison Xu's avatar
      introduce ConcurrentHashMap::erase_key_if · 376d6554
      Harrison Xu authored
      Summary:
      Adding a new method `ConcurrentHashMap::erase_key_if`. This is a more general form of `erase_if_equal`, which allows arbitrary predicates to be evaluated against the existing value type, rather than simple equality.
      
      `erase_key_if` was chosen as a name to avoid confusion with `std::erase_if`.
      
      Reviewed By: magedm
      
      Differential Revision: D22775217
      
      fbshipit-source-id: 151975216d5d4288ec4e88b81f6a8d17a091e8f0
      376d6554
    • Cooper Lees's avatar
      Allow a project to have Actions run on all branches · 93921194
      Cooper Lees authored
      Summary:
      - I find the ability to make a branch and play with CI on GitHub super handy
      - Removing the `- master` limitation gives me this ability
      
      Reviewed By: yi-xian
      
      Differential Revision: D22771835
      
      fbshipit-source-id: 8e8839cb860ab4d1dfa0dda590afaf165127f60d
      93921194
    • Nick Terrell's avatar
      Fix 1-byte buffer overrun · 1e3603df
      Nick Terrell authored
      Summary: Fix 1-byte buffer overrun when parsing the string "-".
      
      Reviewed By: mhlakhani
      
      Differential Revision: D22695995
      
      fbshipit-source-id: 9d1834c068fc3889a514b77d53d626eb6f72b6c6
      1e3603df
    • Eric Sun's avatar
      Implement BatchSemaphore which is able to accept batch tokens · 6958370b
      Eric Sun authored
      Summary: In addition to `folly::fibers::Semaphore` which only accepts single token increment/decrement. `folly::fibers::BatchSemaphore` is able to accept batch tokens
      
      Differential Revision: D21874795
      
      fbshipit-source-id: 1d4c62bdb079c058529cd917078d81d09d585084
      6958370b
    • Eric Sun's avatar
      Implement SemaphoreBase which is able to accept batch tokens · 93cbddb8
      Eric Sun authored
      Summary:
      * Implement `SemaphoreBase` which is able to accept batch tokens, most of the logic is copy-pasted from `folly::fibers::Semaphore` with batch token as parameter
      * This serves as base object which is not public accesseble
      * BatchSemaphore which is able to accept batch tokens and Semaphore will use `SemaphoreBase` as a fundation
      
      Differential Revision: D21874699
      
      fbshipit-source-id: 2536284a2480f2972bd00010833de49bcd5304b2
      93cbddb8
    • Cooper Lees's avatar
      Remove configparser deprecated method readfp · 07d0effa
      Cooper Lees authored
      Summary:
      - Replace deprecated method
      - Stops spam to my console as I run with show deprecation warnings
      
      Reviewed By: yi-xian
      
      Differential Revision: D22776372
      
      fbshipit-source-id: d29193e4c4c26d7facfabf9038dcb33c1af92434
      07d0effa
    • Nathan Bronson's avatar
      handle MSVC debug iterator tracking in F14 fallback · 4eb1b242
      Nathan Bronson authored
      Summary:
      MSVC's maintains an intrusive linked list of iterators for
      debugging purposes in some build configurations, which means that
      F14MapFallback's hacky conversion from unordered_map::local_iterator to
      unordered_map::iterator doesn't work.  Fortunately, on that platform
      local_iterator and iterator are the same type, so no hack is needed.
      
      Reviewed By: Orvid
      
      Differential Revision: D22776318
      
      fbshipit-source-id: 80283c4c451afffe522e55e47cd94971126a6fa6
      4eb1b242
    • Misha Shneerson's avatar
      Saturation detector. Naming the queues. Diff 3/7 · a055d929
      Misha Shneerson authored
      Summary: we should report the name of the executore/threadpool that is saturated. propagate names of the executor/threadpool onto the queue we are monitoring.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D20773871
      
      fbshipit-source-id: f7f78edd62d515cca19e30a63773180404843c1b
      a055d929
    • Misha Shneerson's avatar
      fix accessing current rctx in `RequestData::onUnset` callbacks · df19d44b
      Misha Shneerson authored
      Summary:
      as titled
      
      The issue here was that we were clearing out the value of current rctx from TLS, then calling `onUnset`. So calling `RequestContext::get` from within the `onUnset` callback resulted in returning the default global RCTX.
      
      Reviewed By: yfeldblum, zhxchen17
      
      Differential Revision: D22750092
      
      fbshipit-source-id: 509676d047cf6aec05d08ff3bf656d6d1558fbf5
      df19d44b
    • Cooper Lees's avatar
      Add new --disallow-system-packages flag to `generate-github-actions` · bcfad25b
      Cooper Lees authored
      Summary:
      - Make OpenR build all deps from source until we remove fbzmq as a dep
      - Allow a project to move it's Open Source CI forward to an alternative version of ubuntu via a new `--ubuntu-version` parameter
      
      Reviewed By: wez
      
      Differential Revision: D22768987
      
      fbshipit-source-id: 07205efbd0c87a702638cf30b84a2850d064fa8e
      bcfad25b
    • Igor Sugak's avatar
      make JsonMockUtil.h compatible with latest googletest · 1b940536
      Igor Sugak authored
      Reviewed By: andrewjcg
      
      Differential Revision: D22743063
      
      fbshipit-source-id: 1da870027c92b11509056769626ed1f442d1b426
      1b940536
  6. 27 Jul, 2020 1 commit
    • Yedidya Feldblum's avatar
      Move the ubuntu build script to 18.04 · c84aa29a
      Yedidya Feldblum authored
      Summary: [Folly] Move the ubuntu build script to 18.04 from 14.04 and the boost default dep to 1.65.1.
      
      Reviewed By: fredemmott
      
      Differential Revision: D22779335
      
      fbshipit-source-id: 61be6ef8f3cefa05a8d016a061cbc42605215711
      c84aa29a
  7. 26 Jul, 2020 3 commits
  8. 25 Jul, 2020 4 commits
  9. 24 Jul, 2020 4 commits
    • Lewis Baker's avatar
      Add retryWhen(), retryN() and retryWithExponentialBackoff() · ba3ee5d7
      Lewis Baker authored
      Summary:
      Add some coroutine-native versions of the retrying algorithms available
      for retrying folly::Future-based operations.
      
      Adds the following:
      * `retryWhen()` - This is the fundamental retry algorithm that allows
        you to specify logic to determine whether to retry and if so when to
        retry.
      * `retryN()` - For simple use-cases that immediately retries operations
        up to N times.
      * `retryWithExponentialBackoff()` - Retries the operation after an
         exponentially increasing delay with some random jitter applied.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22535487
      
      fbshipit-source-id: c5594d0edfc2414015c345bee79e34f5cdafb789
      ba3ee5d7
    • Chad Austin's avatar
      fix link error on gcc 10 · 7daf90c7
      Chad Austin authored
      Summary:
      Building Folly on Fedora 32 fails with a link error, saying
      SingletonVault::kDefaultShutdownTimeout_ is undefined. I did not
      investigate, but this constant is only used in one place, so inline
      it.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22713828
      
      fbshipit-source-id: 707797eaef4633e642d07b2b02d9f55187afb99f
      7daf90c7
    • Lewis Baker's avatar
      Add folly::coro::timeout() algorithm · 008f5538
      Lewis Baker authored
      Summary:
      This algorithm takes an awaitable and a duration and
      cancels the operation and completes with a `FutureTimeout`
      error if the operation does not complete within the specified
      duration.
      
      This differs from `timed_wait()` in that it still waits
      for the child operation to complete, even once the timeout
      has elapsed, rather than just detaching from the
      operation and letting it complete in the background.
      
      This relies on the operation responding to cancellation
      in a timely manner for the algorithm to have the effect
      of returning shortly after the timeout elapses.
      
      The benefit of waiting for the child operation to complete,
      however, is that it allows you to safely pass parameters by
      reference to the child operation and be safe in knowing that
      the child operation will complete before the awaiting
      coroutine resumes and potentially destroys those parameters.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D22199932
      
      fbshipit-source-id: 4f6295a23a860ec52b639eb56a02f8029ffb9009
      008f5538
    • Misha Shneerson's avatar
      Saturation detector. Basic algorithm. Diff 1/7 · 586a200d
      Misha Shneerson authored
      Summary: Basic FIFO queues observation hooks.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D20773870
      
      fbshipit-source-id: 3f9cbab1b8b10204139ce153d92e08ffb5f6254c
      586a200d