1. 01 Aug, 2018 4 commits
    • Matthieu Martin's avatar
      Merge setContext and unsetShallowCopyContext · 6b3a5109
      Matthieu Martin authored
      Summary:
      There is no reason for setContext to call set/unset when both request context holds identical data.
      So merge unsetShallowCopyContext implementation there.
      
      Reviewed By: djwatson
      
      Differential Revision: D9119718
      
      fbshipit-source-id: 7b9c6badbfb29416b6b0032467984720b697a1e8
      6b3a5109
    • Matthieu Martin's avatar
      Don't shallow copy default request context · a26a1a9e
      Matthieu Martin authored
      Summary:
      This is to be consistent with setContext, which doesn't call set/unset of the default context.
      Main goal is to merge code in next diff.
      
      I think the default context is never relevant, and should only be the current context in the internal of the async framework, in between executing coroutines.
      We should probably enforce that request data is never set in the default context to guarantee correctness.
      
      Reviewed By: djwatson
      
      Differential Revision: D9119717
      
      fbshipit-source-id: 8fa07520d506c02663f58f7616f1f390645997bc
      a26a1a9e
    • Matthieu Martin's avatar
      Fix shallow copy segfault · 98fef9ad
      Matthieu Martin authored
      Summary: Mishandling of parent end boundary.
      
      Reviewed By: djwatson
      
      Differential Revision: D9119716
      
      fbshipit-source-id: c186e5acffdedc77577e1ab3a7b5876a6423e0f4
      98fef9ad
    • Joe Loser's avatar
      Replace boost::next with std::next (#896) · 4875d385
      Joe Loser authored
      Summary:
      - Replace uses of `boost::next` with `std::next`.
      - Replace uses of `boost::prior` with `std::prev`.
      Pull Request resolved: https://github.com/facebook/folly/pull/896
      
      Reviewed By: ot
      
      Differential Revision: D9114372
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: 4b15b81ffb43dee00b64c4abc171747a95ceb6b7
      4875d385
  2. 31 Jul, 2018 5 commits
    • Marshall Cline's avatar
      improve compile-time errmsg for f.get() · ac96eb79
      Marshall Cline authored
      Summary:
      We have seen some caller-confusion after removing the lvalue-qualified Future::get().
      
      Goal of this is to improve/clarify the compile-time error-msg for `future.get()`.
      
      The resulting error-messages are compiler-dependent, but generally they are more explicit, indicating an explicit deletion of the lvalue-qualified method, and in some cases also displaying the deprecation-message:
      
      * Clang:
        * old: 'this' argument to member function 'get' is an lvalue, but function has rvalue ref-qualifier
        * new: call to deleted member function 'get': must be rvalue-qualified, e.g., std::move(future).get()
      * gcc:
        * old: error: passing 'Future<int>' as 'this' argument discards qualifiers [-fpermissive]
        * new: use of deleted function 'T Future<T>::get() & [with T = int]'
      * MS VC:
        * old: 'int Future<int>::get(void) &&': cannot convert 'this' pointer from 'Future<int>' to 'Future<int> &&'
        * new: 'int Future<int>::get(void) &': attempting to reference a deleted function
      * icc:
        * old: function "Future<T>::get [with T=int]" (declared at line 6) cannot be called on an lvalue
        * new: function "Future<T>::get() & [with T=int]" (declared at line 9) was declared deprecated ("must be rvalue-qualified, e.g., std::move(future).get()")
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9071064
      
      fbshipit-source-id: a40712ce94fd10bc153cb74a7d6d6a0539e07a15
      ac96eb79
    • Yedidya Feldblum's avatar
      Use C++ v.s. PP to handle libcpp in dynamic ctor · 359eb495
      Yedidya Feldblum authored
      Summary: [Folly] Use C++ v.s. PP to handle libcpp in `dynamic` ctor taking `std::vector<bool>::const_reference`.
      
      Reviewed By: shixiao
      
      Differential Revision: D9027115
      
      fbshipit-source-id: 94de4260d1d40ac450c37d3803994d436adcf06e
      359eb495
    • Yedidya Feldblum's avatar
      Mark std::list as not relocatable · b3aee940
      Yedidya Feldblum authored
      Summary:
      [Folly] Mark `std::list` as not relocatable.
      
      From the github issue (facebook/folly#889), `std::list` allocated storage may hold back-pointers to the owning `std::list` object in both libstdc++ and libc++.
      
      The relocatability marking dates to 2011 or earlier; perhaps it applied then.
      
      Closes #889.
      
      Reviewed By: nbronson
      
      Differential Revision: D9043357
      
      fbshipit-source-id: bf954e74f36f554bfbb2e5bb5ac40b933a749003
      b3aee940
    • Marshall Cline's avatar
      fix contract nits (non-functional; comment-only) · 28f37dc5
      Marshall Cline authored
      Summary: Fix a few nits in the contracts/specification
      
      Reviewed By: yfeldblum
      
      Differential Revision: D8962060
      
      fbshipit-source-id: 8344403d3e26a01bef02deee3bb964fbaf6a1591
      28f37dc5
    • Tingzhe Zhou's avatar
      Concurrent Priority Queue: Fast and Scalable · 148e1b8f
      Tingzhe Zhou authored
      Summary:
      This is the implementation of the unbounded concurrent priority queue based on Mound.
       - The data structure supports push, pop, size and empty operations.  [TODO: timed pop]
       - User can select whether it is the strict priority queue (PopBatch = 0), or relaxed implementation (PopBatch > 0).
       - Supports blocking.
      
      Reviewed By: magedm
      
      Differential Revision: D9028417
      
      fbshipit-source-id: e12dc43aef4fb5b1195d9e27807cbd9f0ad1a401
      148e1b8f
  3. 30 Jul, 2018 2 commits
    • Yedidya Feldblum's avatar
      Use brace-initialization for folly::none · 8daf15ad
      Yedidya Feldblum authored
      Summary:
      [Folly] Use brace-initialization for `folly::none`.
      
      Will help with future work.
      
      Reviewed By: shixiao
      
      Differential Revision: D9039671
      
      fbshipit-source-id: fc34041bc040332540ed3e9dfd7ab452e82ca47f
      8daf15ad
    • Dan Melnic's avatar
      Adding UDP generic segmentation offload support · 9af8f2be
      Dan Melnic authored
      Summary: Adding UDP generic segmentation offload support
      
      Reviewed By: siyengar
      
      Differential Revision: D8825396
      
      fbshipit-source-id: 5974307c2a901f4967e6f1c678b604ec1c21b3d0
      9af8f2be
  4. 29 Jul, 2018 2 commits
  5. 28 Jul, 2018 1 commit
    • Phil Willoughby's avatar
      thread safe errno->string · 5ae9ed9e
      Phil Willoughby authored
      Summary: `strerror` isn't thread safe, `folly::errnoStr` is.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D9036249
      
      fbshipit-source-id: da4ad1089f4319e62b0273ec12b4950624105a77
      5ae9ed9e
  6. 27 Jul, 2018 3 commits
    • Yedidya Feldblum's avatar
      Fix fbvector::swap impl · c3440ba2
      Yedidya Feldblum authored
      Summary:
      [Folly] Fix `fbvector::swap` impl to do proper ADL.
      
      Instead of passing template parameters, cast the arguments. That way non-template `swap` overloads can also be found.
      
      Reviewed By: Gownta
      
      Differential Revision: D9026136
      
      fbshipit-source-id: 29240fed1c90d3556c2476917a21cbe1949c9a3c
      c3440ba2
    • Mahesh Maddikayala's avatar
      fix travis build failure for 'sigar' package · 7acadf6e
      Mahesh Maddikayala authored
      Summary: Added option to send parameters to 'configure' script from fbcode builder
      
      Reviewed By: jstrizich
      
      Differential Revision: D9004547
      
      fbshipit-source-id: da54fa2dd453aab29051f37106423807a260535a
      7acadf6e
    • Yedidya Feldblum's avatar
      Tweaks to Futures after D9015012 · ff3c5f9c
      Yedidya Feldblum authored
      Summary:
      [Folly] Tweaks to Futures after {D9015012}.
      
      * Publish base-class methods with `using`.
      * Use trailing-comma in list initializers.
      
      Reviewed By: shixiao
      
      Differential Revision: D9024885
      
      fbshipit-source-id: d1e548630152a7d7ce892084daef24a4e62dd0df
      ff3c5f9c
  7. 26 Jul, 2018 7 commits
    • Pedro Eugenio Rocha Pedreira's avatar
      Propagate executor priority through FutureSplitter · a31665e0
      Pedro Eugenio Rocha Pedreira authored
      Summary:
      The futures created by FutureSplitter don't carry the orginal future's
      executor priority, what makes it hard to guarantee that certain operations
      based on a future chain run on a determined executor priority.
      
      Reviewed By: WillerZ
      
      Differential Revision: D9015012
      
      fbshipit-source-id: 96b7e7ccb33583105f96d2170eeb159493b93ed0
      a31665e0
    • Dave Watson's avatar
      Switch to radix sort for DigestBuilder · 44cad810
      Dave Watson authored
      Summary: Radix sort (as implemented by boost's spreadsort) is 2x faster than std::sort.
      
      Reviewed By: nbronson
      
      Differential Revision: D8875766
      
      fbshipit-source-id: d88a323e6c14d58f0820c2d6d8c3d578c1305482
      44cad810
    • 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 20 Jul, 2018 3 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