1. 26 Jul, 2018 5 commits
    • Alexander Kindyakov's avatar
      Fix up error in generic definition of folly::swap · b0eb4087
      Alexander Kindyakov authored
      Summary:
      - Fix up wrong order of template arguments in Expected generic
        - Create tests to check up all 3 forms of swap for Expected
      
      Reviewed By: ericniebler
      
      Differential Revision: D9013316
      
      fbshipit-source-id: d4cebd83b268a4c5c551ac970f67b598f117fa73
      b0eb4087
    • Xiao Shi's avatar
      add implicit constructor for `vector<bool>::const_reference` for libcpp · b9d2332c
      Xiao Shi authored
      Summary:
      Despite the standard, `std::vector<bool>::const_reference` is not `bool` in
      libcpp: http://howardhinnant.github.io/onvectorbool.html
      
      Add the implicit ctor so that `f(dynamic)` can be invoked with `f(v[idx])`
      where `v` is a `const vector<bool>` under libc++.
      
      Reviewed By: ot
      
      Differential Revision: D8992805
      
      fbshipit-source-id: 0675174c2a247257238bb11b2c7b319653fe92a3
      b9d2332c
    • Matthieu Martin's avatar
      Avoid set/onset calls while shallow copying RequestContext · bd450a65
      Matthieu Martin authored
      Summary:
      Per title
      I found that it was easier to bypass setContext (and not extend RequestContextScopeGuard) to achieve this result.
      
      setShallowCopyContext now directly set the copy as current
      the new unsetShallowCopyContext exclusively calls set/onset for the context data that was overriden. This assumes that cost will be fine because the callbackData_ sets are small or empty.
      Similar reason they were split from requestData_ in the first place, for RequestContextScopeGuard efficiency.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D8943668
      
      fbshipit-source-id: ad99177429de6b7b65bf95fa0e94334d73c3750d
      bd450a65
    • Matthieu Martin's avatar
      Introduce folly ShallowCopyRequestContextScopeGuard · f63877d7
      Matthieu Martin authored
      Summary:
      This guard maintains all the RequestData pointers of the parent (through shallow copy).
      This allows to overwrite a specific RequestData pointer for the scope's duration, without breaking others.
      
      We decided to keep the raw ptr interface, which required to implement a pseudo shared ptr to achieve the shallow copy behaviour.
      Rest of the code is pretty straight forward. A few more lines than expected, due to introducing overrideContextData to avoid unecessary memory management (clearData) or warnings (setData).
      
      The performance should be neutral for code not using the guard (std::atomic incr/decr).
      The guard itself is pretty efficient at copying the values, though there is a slight worry about the keys (std::string). This might be a generic concern about current implementation, some form of cheap static would be better.
      It also calls unecessarily onSet/onUnset. I will fix on top as it makes the change more complex.
      
      Reviewed By: djwatson
      
      Differential Revision: D8911351
      
      fbshipit-source-id: 1692428382ace1d0b79bbc84a1db50efb4c7b489
      f63877d7
    • Matthieu Martin's avatar
      Revert "Avoid set/onset calls while shallow copying RequestContext" · 4941d624
      Matthieu Martin authored
      Summary: This added significant cost, it will take effort to deploy, reverting for now
      
      Differential Revision: D9007024
      
      fbshipit-source-id: 04074b09a1a2b7f9b57e3d755a2754657dda21c2
      4941d624
  2. 25 Jul, 2018 2 commits
    • Lee Howes's avatar
      Executor-taking and SemiFuture versions of folly::futures::map. · 4d3071a3
      Lee Howes authored
      Summary: Allow map to take a SemiFuture vector by changing the way the return type is deduced. Add overloads that take executor to apply.via and run the mapped tasks on a specified executor, and additionally return a Future that completes on that executor.
      
      Reviewed By: andriigrynenko
      
      Differential Revision: D7559540
      
      fbshipit-source-id: f9480ea89fcfaa25a050ee7428dc69de300ccfde
      4d3071a3
    • Andrii Grynenko's avatar
      Mark toSemiFuture as inline · 41bb0dc1
      Andrii Grynenko authored
      Summary: Non-template functions in header files have to be marked as inline to avoid linker errors.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8983661
      
      fbshipit-source-id: 8f003e9f4e2d40cb6122da8e9e0adacab00ed0fa
      41bb0dc1
  3. 24 Jul, 2018 7 commits
    • Xiao Shi's avatar
      make conversion explicit in `findLastSet` for longer integral types · 2a7d0faa
      Xiao Shi authored
      Summary:
      When the param type is larger than `unsigned int`, the wider type `size{}` was
      implicitly converted to the return type `unsigned int` in `findLastSet`. This
      diff makes the conversion explicit.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8971589
      
      fbshipit-source-id: 8828504c462e9296b84a746bcb7f701bc4a7d20e
      2a7d0faa
    • 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
  4. 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
  5. 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
  6. 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
  7. 19 Jul, 2018 2 commits
  8. 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
  9. 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
  10. 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
  11. 14 Jul, 2018 3 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