1. 24 Jul, 2018 6 commits
    • Dan Melnic's avatar
      Make ThreadEntry::elementsCapacity atomic · 83a22fdd
      Dan Melnic authored
      Summary: Make ThreadEntry::elementsCapacity atomic
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8963304
      
      fbshipit-source-id: 0b37bbe97475a400e9b574b8285bde8f38a479f5
      83a22fdd
    • Hugo Cuvillier's avatar
      Make `folly::FixedString` compile with Xcode's toolchain. · acdd0d80
      Hugo Cuvillier authored
      Summary:
      Xcode wasn't impressed when I tried to import `folly::FixedString` from a Objective-C++ context.
      
      This seem to satisfy Xcode's toolchain.
      
      Reviewed By: lambdapioneer
      
      Differential Revision: D8855137
      
      fbshipit-source-id: 7bb3b1039b30241797ec7f3df7c0bbdeffca87bf
      acdd0d80
    • Xiao Shi's avatar
      Use folly Hash to hash strings in dynamic · e7401c7b
      Xiao Shi authored
      Summary:
      There should be no expectations on what hash is internally used in dynamic, so
      we don't need to maintain compatibility with `fbstring`, which hasn't been used
      as string storage in `dynamic` for quite a while.
      
      Reviewed By: yfeldblum, ot
      
      Differential Revision: D8824634
      
      fbshipit-source-id: 6765472aeeacb55c68b058f5dcc128f6b400bc95
      e7401c7b
    • Harsh Poddar's avatar
      Add sync_level option to the logging config · 6b1869e2
      Harsh Poddar authored
      Summary:
      GLOG has `-logbuflevel` option that allows a user to specify the level above which none of the logs should be buffered. This is helpful as we can configure it such that `INFO` and all verbose logs are buffered before being output, but all logs above `INFO` should be flushed synchronously. This will ensure that all logs above a certain level are printed before any sort of crash.
      
      This diff allows a user to specify a config `sync_level`. The value for this can be any `LogLevel`. Example config:
      
        .=WARN,akkio.cli=INFO; default:async=true,sync_level=WARN
      
      The default value for GLOG's -logbuflevel is `0` (`INFO`).
      To match GLOG's behavior, this diff sets the following as defaults:
      
        async=true,sync_level=WARN
      
      Reviewed By: simpkins
      
      Differential Revision: D8867555
      
      fbshipit-source-id: 7ec30dfb41b2f3cd3568d70304db7a9fcf668779
      6b1869e2
    • Harsh Poddar's avatar
      Update default LogLevel to match GLOG · 6a8e5fd0
      Harsh Poddar authored
      Summary: Update default log level for Folly's logging to match that of Google's logging. This will make it easier to migrate between the two.
      
      Reviewed By: simpkins
      
      Differential Revision: D8941725
      
      fbshipit-source-id: 14ed352d9a012f2604ff4329cc7cd038b2c0ee26
      6a8e5fd0
    • Louis Brandy's avatar
      a few include-what-you-use fixes · 0a69d138
      Louis Brandy authored
      Summary: These headers don't include everything they use so things build now because of rando include orders and transitive inclusion. Breaks when attempting to build with clang modules.
      
      Reviewed By: shixiao
      
      Differential Revision: D8954753
      
      fbshipit-source-id: d222370f17594f5c6aeccd21cbfd61bd8102245a
      0a69d138
  2. 23 Jul, 2018 2 commits
    • Mahesh Maddikayala's avatar
      Add resource monitor object to fbzmq library · 360307fd
      Mahesh Maddikayala authored
      Summary:
      Add resource monitor object to fbzmq library to monitor CPU and memory. User can use
      the object to query RSS memory, cpu usage, and optionally call API to monitor memory periodicially
       and crash when reaches beyond a specified threshold limit.
      
      Reviewed By: cenzhao
      
      Differential Revision: D8873504
      
      fbshipit-source-id: a445fdd580da82c55fba09c43f46f60bb9f1149a
      360307fd
    • Maged Michael's avatar
      ConcurrentHashMap: Try reclaim objects immediately in destructor. · f0a3212d
      Maged Michael authored
      Summary: Destructor unlinks and reclaims nodes immediately without checking hazard pointers.
      
      Reviewed By: djwatson
      
      Differential Revision: D8864161
      
      fbshipit-source-id: 270df5e6b3ef8bc33934b6d55df465309f1068bd
      f0a3212d
  3. 21 Jul, 2018 2 commits
    • Yedidya Feldblum's avatar
      Generic conversion from Range in cases like std::string_view · dbaf54c0
      Yedidya Feldblum authored
      Summary: [Folly] Generic conversion from `Range` in cases like `std::string_view` which are constructible with `Iter, size_type` instead of `Iter, Iter`.
      
      Reviewed By: vitaut
      
      Differential Revision: D8907212
      
      fbshipit-source-id: 6f93581b7185d4d10925aa57175f130dff2576e3
      dbaf54c0
    • Yedidya Feldblum's avatar
      Use traits in Range conversion functions · 667f7df0
      Yedidya Feldblum authored
      Summary:
      [Folly] Use traits in `Range` conversion functions.
      
      Dependent code requires this for msvc2015.
      
      Reviewed By: vitaut
      
      Differential Revision: D8929559
      
      fbshipit-source-id: dbf4afbebdf92ee4eb46067ff443980823cd771d
      667f7df0
  4. 20 Jul, 2018 5 commits
    • Jason Rahman's avatar
      Rename HHWheelTimer::Callback::context_ -> requestContext_ · 98d3bec7
      Jason Rahman authored
      Summary: HHWheelTimer::Callback is frequently used as a base class for callback objects, while context_ is a commonly desired member name in other classes that also serve as base classes for HHWheelTimer::Callback derived classes. Renaming in HHWheelTimer::Callback to free up availability of context_.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8937020
      
      fbshipit-source-id: 8a4612bc57f28673762604cc118a91a347e5972d
      98d3bec7
    • Matthieu Martin's avatar
      Revert Folly NestedRequestContextGuard · 20eea8f0
      Matthieu Martin authored
      Summary:
      This attempted to provide a deep copy guard for folly request context.
      
      Per brainstorming (see task), we don't think that deep copying all metadata has legitimate use cases. And in fact, this has no usage in our codebase currently. Because it default to reset (when createChild is not overriden), the behaviour is also very confusing.
      
      Guards's goal is usually to copy 1 metadata. The solution for that is to provide a shallow copy guard. Something that I will do on top of this revert.
      I'll wait for both changes to be discussed and accepted before landing this one.
      
      Reviewed By: yfeldblum, LeeHowes
      
      Differential Revision: D8906912
      
      fbshipit-source-id: e8b9eed04cbe539009037ff75d51e28941502d88
      20eea8f0
    • Matthieu Martin's avatar
      Fix set/unset for default folly RequestContext · dec334ce
      Matthieu Martin authored
      Summary:
      My guess is that if we allow to set data in the default context, we also expect set/unset to work.
      It currently doesn't. This fixes it (at least, the test repro passes), but not sure it's the right fix.
      
      Reviewed By: djwatson
      
      Differential Revision: D8910506
      
      fbshipit-source-id: cedf1dd0ee91761d210137949da7477ed69fce31
      dec334ce
    • Yedidya Feldblum's avatar
      Comments to document explicit conversions from Range · 09c55d0a
      Yedidya Feldblum authored
      Summary: [Folly] Comments to document explicit conversions from `Range`.
      
      Reviewed By: terrelln
      
      Differential Revision: D8921990
      
      fbshipit-source-id: 0728e0096738f9a86eecfaa5b05d4dfbcb0533b6
      09c55d0a
    • Yedidya Feldblum's avatar
      Cut non-const conversion overloads from Range · b5f590c2
      Yedidya Feldblum authored
      Summary: [Folly] Cut non-`const` conversion overloads from `Range`, for both `operator T` and `to<T>`: let them be `const` member functions so that the converted-to object cannot update `Range` internal state.
      
      Reviewed By: terrelln, vitaut
      
      Differential Revision: D8921428
      
      fbshipit-source-id: eefc14b5fe2033cac43ebc274b27bdea95388488
      b5f590c2
  5. 19 Jul, 2018 2 commits
  6. 18 Jul, 2018 8 commits
    • Yang Zhang's avatar
      Add ThreadPoolExecutor::numActiveThreads() · ac6b1e28
      Yang Zhang authored
      Summary: ThreadPoolExecutor could dynamically adjust number of threads according to workload. Add numActiveThreads() so we can check how many active threads are actually there, while numThreads() returns the upper bound of threads.
      
      Reviewed By: djwatson
      
      Differential Revision: D8683795
      
      fbshipit-source-id: 09f3b4ee8570e2f2f9f97e939061693f3e0639af
      ac6b1e28
    • Maged Michael's avatar
      hazptr: Add function to reclaim linked objects without checking hazard pointers. · bc809fb4
      Maged Michael authored
      Summary:
      Add unlink_and_reclaim member function to hazptr_obj_base_linked, as an alternative to unlink() that reclaims the object if its link count is zero without checking hazard pointers.
      It is useful in destructors of data structures when it is guaranteed that objects are not protected by hazard pointers (e,.g., destructor of ConcurrentHashMap).
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8864019
      
      fbshipit-source-id: 618eeded45a1f8b9503569d1ceca9994ca6e317f
      bc809fb4
    • Doron Roberts-Kedes's avatar
      DeterministicSchedule: Deschedule parent threads while they wait to join child threads. · 49a83b77
      Doron Roberts-Kedes authored
      Summary:
      Eliminate while loop behavior in DeterministicSchedule::join
      
      Depends on D8789304
      
      Reviewed By: djwatson
      
      Differential Revision: D8840276
      
      fbshipit-source-id: f0b0db60f7bec344d021a49cec408a2604d4a1c8
      49a83b77
    • Doron Roberts-Kedes's avatar
      DeterministicSchedule: Deschedule threads waiting to acquire DeterministicMutex · 566f0478
      Doron Roberts-Kedes authored
      Summary: Eliminate spinlock behavior from DeterministicMutex::lock by descheduling threads waiting to acquire the mutex, and placing the thread local semaphore in a waitqueue for the mutex. The unlocking thread reschedules a single waiting thread if the workqueue is non empty.
      
      Reviewed By: djwatson
      
      Differential Revision: D8789304
      
      fbshipit-source-id: 8ffe3e289c9abfe7515b678ff98f0cefef2461c0
      566f0478
    • Chad Austin's avatar
      Drain ManualExecutor on destruction · a72a920c
      Chad Austin authored
      Summary:
      For use in tests where the executor has a nontrivial lifetime but any
      queued jobs should be completed, have ManualExecutor drain itself
      before it's destroyed.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8845457
      
      fbshipit-source-id: 7c2aa65aa27a7850ff73a93cfbe34c2248b62d26
      a72a920c
    • Aaryaman Sagar's avatar
      Remove const wlock acquisition · 37c011d8
      Aaryaman Sagar authored
      Summary:
      Change the write acquire interface to only acquire write locks on non-const
      `Synchronized` instances.  This reflects the intention of mutation associated
      with a write lock.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8851208
      
      fbshipit-source-id: 5be9d2e4a38d25632430a9b6c981b6e7f8412daa
      37c011d8
    • Dan Melnic's avatar
      Fix broken opt build due to "error: unused variable 'rv'" · 9793a0e7
      Dan Melnic authored
      Summary: Fix broken opt build due to "error: unused variable 'rv'"
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8883701
      
      fbshipit-source-id: 2a832cfea0bd9cbca63a8d5c2c8d7127593728af
      9793a0e7
    • Aaryaman Sagar's avatar
      Remove const folly::Synchronized upgrade lock acquire · ea29a7a6
      Aaryaman Sagar authored
      Summary: Users acquiring upgrade locks should only be allowed to lock the synchronized object when it is non-const.  Because an upgrade locks are permitted to transition to write locks when mutation is required.  At which point non-const access is often required on the Synchronized object.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8654360
      
      fbshipit-source-id: c2a6574bd880db0d8e4c90166e288f5b83542ad6
      ea29a7a6
  7. 17 Jul, 2018 2 commits
    • Nathan Bronson's avatar
      mark uses of folly::assume used to optimize placement new · 0aa15e94
      Nathan Bronson authored
      Summary:
      F14 currently has numerous places where folly::assume is used to
      help optimization on GCC < 6.  These are all things the optimizer should
      be able to deduce itself, so it would be nice to eventually remove them.
      This diff marks them with TODO(T31574848), as well as removing two
      occurrences in F14Table that duplicated an assume in F14Policy.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8849832
      
      fbshipit-source-id: e88143b4d29f1a633b51467206c6fb6afd1cd296
      0aa15e94
    • Nick Cooper's avatar
      Remove the ' ' prior to : in folly::json's pretty output. · 001320e2
      Nick Cooper authored
      Summary: Remove the ' ' prior to : in folly::json's pretty output - this improves consistency with other JSON formatters.
      
      Reviewed By: yfeldblum, luciang
      
      Differential Revision: D8843977
      
      fbshipit-source-id: 1d5c84d7d3806ad8752b619ffe23101f7f103683
      001320e2
  8. 16 Jul, 2018 2 commits
    • Maged Michael's avatar
      UnboundedQueue: Add cleanup of remaining items at destruction. · f96d7622
      Maged Michael authored
      Summary:
      - Add cleanup of remaining items, if any, at destruction.
      - Add test.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D8860966
      
      fbshipit-source-id: e3ab2e6ff31e08d91aa20c8c058471823c722a38
      f96d7622
    • Maged Michael's avatar
      hazptr: Add test to detect no reclamation, without calling cleanup. · c5f46707
      Maged Michael authored
      Summary: Add test to detect no reclamation (without calling hazptr_cleanup). The test retires a number of objects that would trigger bulk reclamation. One or more objects are expected be reclaimed. The number of retired objects must be greater than or equal to hazptr_domain::kThreshold to expect reclamation to happen.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8849957
      
      fbshipit-source-id: ef590af21a55348ed0ed72be3637853eceb21cbc
      c5f46707
  9. 14 Jul, 2018 5 commits
    • Marshall Cline's avatar
      remove lvalue-qual Future::get(...) · 0b1134d2
      Marshall Cline authored
      Summary:
      This is part of "the great r-valuification of folly::Future":
      
      * This is something we should do for safety in general.
      * Using lvalue-qualified `Future::get(...)` has caused some failures around D7840699 since lvalue-qualification hides that operation's move-out semantics - leads to some use of future operations that are really not correct, but are not obviously incorrect.
      * Problems with `Future::get(...) &`: it moves-out the result but doesn't invalidate the Future - the Future remains (technically) valid even though it actually is partially moved-out. Callers can subsequently access that moved-out result via things like `future.get()`, `future.result()`, `future.value()`, etc. - these access an already-moved-out result which is/can be surprising.
      * Reasons `Future::get(...) &&` is better: its semantics are more obvious and user-testable. It moves-out the Future, leaving it with `future.valid() == false`.
      * Note: `get(...)` refers to `get()` and `get(Duration)`.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8710296
      
      fbshipit-source-id: ae201af1928eb2f6a2897c9b7db884393b36b910
      0b1134d2
    • Maged Michael's avatar
      hazptr: Fix hazptr_priv::push_all_to_domain to try reclamation when not in dtor · 41ed7dd9
      Maged Michael authored
      Summary: The most recent change had a bug that prevents all calls to hazptr_priv::push_all_to_domain from trying reclamation, instead of preventing that only when called from the destructor of hazptr_priv and during reclamation.
      
      Reviewed By: davidtgoldblatt
      
      Differential Revision: D8849738
      
      fbshipit-source-id: 15a27e8d4a88288179609e8cf179bc8c10c96b90
      41ed7dd9
    • Nathan Bronson's avatar
      optimize first insertion into F14 hash table · cf17895f
      Nathan Bronson authored
      Summary:
      This diff performs several micro-optimizations that improve
      the lifecycle of a single-element F14FastMap or F14FastSet by about 10%
      (in a single-threaded microbenchmark).  Lifecycle here means construction,
      insertion of one entry, and then destruction, so it includes one malloc
      and one free.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8771446
      
      fbshipit-source-id: 95d59f32de5a450b16ecdcb0e39b7f566ce797da
      cf17895f
    • Adam Simpkins's avatar
      logging: add XCHECK() and XDCHECK() macros · 5c438fac
      Adam Simpkins authored
      Summary:
      This adds `XCHECK()` and `XDCHECK()` macros to the folly logging library.
      These are similar to glog's `CHECK()` and `DCHECK()` macros, and should make
      it easier for users to convert from glog to folly logging.
      
      `XCHECK(condition)` is basically an alias for `XLOG_IF(FATAL, condition)`
      
      `XDCHECK(condition)` is like `XCHECK(condition)` in non-debug builds, but is
      compiled out entirely in debug builds.  Note that this is *not* like
      `XLOG_IF(DFATAL, condition)`, which still evaluates the condition but avoids
      crashing (logging the message only) in release builds.
      
      Reviewed By: mnv104
      
      Differential Revision: D8817270
      
      fbshipit-source-id: 86c4575e11af37219b30eda4e7e30273e1e32ab1
      5c438fac
    • Adam Simpkins's avatar
      logging: fix the behavior of XLOG_IF(FATAL, condition) · e8c31188
      Adam Simpkins authored
      Summary:
      Previously `XLOG_IF(FATAL, condition)` always crashed regardless of the
      condition check.  When `XLOG_IF()` was added it did not update the checks used
      to mark the statement as `[noreturn]` based on the log level.  As a result
      `XLOG_IF(FATAL, ...)` always used the `[noreturn]` APIs, even though this code
      can return if the condition is not true.
      
      This splits the `XLOG()` and `XLOG_IF()` implementations so that `XLOG(FATAL)`
      can still be marked as `noreturn` but `XLOG_IF(FATAL, ...)` is no `noreturn`.
      
      Reviewed By: yfeldblum, mnv104
      
      Differential Revision: D8817269
      
      fbshipit-source-id: 47a493eaaac69c563cff07da0888dd423f7dc07d
      e8c31188
  10. 13 Jul, 2018 6 commits
    • Chad Austin's avatar
      clang-format folly/executors/ · 056e121f
      Chad Austin authored
      Summary:
      Run clang-format across folly/executors/.
      
      ```
      find . \( -iname '*.cpp' -o -iname '*.h' \) -exec clang-format -i {} \;
      ```
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8843064
      
      fbshipit-source-id: 0a3c82083eebf2c684a4ab2e12067f0f742bf1d4
      056e121f
    • Louis Brandy's avatar
      make UtilityTest compile with c++17. · 1d2790bc
      Louis Brandy authored
      Summary:
      C++17 actually removes this overload of `std::addressof` to avoid taking the address of constants. It's not clear to me that the second test here is actually adding much value here.
      
      See (2) at: https://en.cppreference.com/w/cpp/memory/addressof
      
      Reviewed By: yfeldblum, elsteveogrande
      
      Differential Revision: D8775544
      
      fbshipit-source-id: a42209484574509f4d032ebbdf05430f0ed372c4
      1d2790bc
    • Adam Simpkins's avatar
      logging: make IntervalRateLimiter constexpr-constructible · 1e877625
      Adam Simpkins authored
      Summary:
      This changes `IntervalRateLimiter` to allow it to be `constexpr`-constructible.
      
      We now always initialize the `timestamp_` field to 0.  The very first call to
      `check()` will now always call `checkSlow()` which will then initialize
      `timestamp_` properly.
      
      This also removes the pure virtual `RateLimiter` interface class.  At the
      moment `IntervalRateLimiter` is the only implementation, and all call sites
      use this class directly.  We can always add the `RateLimiter` interface back
      in the future if we need it later.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8798167
      
      fbshipit-source-id: 80885a16506a8daa67653bd0a92accae7a973289
      1e877625
    • Adam Simpkins's avatar
      logging: reformat fatal_test.py with black · 16ae8fd4
      Adam Simpkins authored
      Summary: Reformat fatal_test.py with black (https://github.com/ambv/black)
      
      Reviewed By: mnv104
      
      Differential Revision: D8817268
      
      fbshipit-source-id: b642496ac61e3b2120b76d9b234c29bf51603651
      16ae8fd4
    • Adam Simpkins's avatar
      logging: update some static lambda variable names · 7af069c3
      Adam Simpkins authored
      Summary:
      Update the static local variable names used in `XLOG_IMPL()` and
      `XLOG_IS_ON_IMPL()` to match the naming style used in D8218663.
      
      The current version of clang-format also appears to be able to format
      `XLOG_IMPL()` correctly now, so remove the comments disabling it around this
      macro body.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8816625
      
      fbshipit-source-id: 155b759953de5d5db0b350f27870edf9f5516914
      7af069c3
    • Adam Simpkins's avatar
      logging: Add rate limiting log macros · 130fca21
      Adam Simpkins authored
      Summary:
      This adds several macros for explicitly rate-limited log messages.
      
      - `XLOG_EVERY_N()` logs only 1 of every N times it is called.
        This is similar to glog's `LOG_EVERY_N()` and `VLOG_EVERY_N()` macros.
      
      - `XLOG_EVERY_MS()` logs only once per specified time interval.
        This is similar to the `LOG_EVERY_MS()` and `LOG_EVERY_MS_ATOMIC()` macros
        that Facebook has defined internally on top of glog.
      
      - `XLOG_N_PER_MS()` logs the first N messages per specified time interval.
      
      These should make it easier for Facebook programs to migrate from glog to
      xlog.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8218663
      
      fbshipit-source-id: a1e71265ace41fea95e5dbb79bc4381962b11297
      130fca21