- 05 Apr, 2019 11 commits
-
-
Orvid King authored
Summary: All calls have been converted to the NetworkSocket overload Reviewed By: yfeldblum Differential Revision: D13566829 fbshipit-source-id: c6a3b155ffe35534c0297eba7819413e4ce77282
-
Yedidya Feldblum authored
Summary: [Thrift] Cut `fbcode_builder` dep for `thrift` on `krb5`. In the past, Thrift depended on Kerberos and the `krb5` implementation for its transport-layer security. However, Thrift has since migrated fully to Transport Layer Security for its transport-layer security and no longer has any build-time dependency on `krb5`. Clean this up. Reviewed By: stevegury, vitaut Differential Revision: D14814205 fbshipit-source-id: dca469d22098e34573674194facaaac6c4c6aa32
-
Lewis Baker authored
Summary: Add functions for concurrently awaiting a collection of SemiAwaitable objects. * `folly::coro::collectAllRange()` takes an InputRange of SemiAwaitable objects and concurrently awaits them, producing a `std::vector` of the results. This will throw an exception if any of the input operations failed with an exception. * `folly::coro::collectAllTryRange()` takes an InputRange of SemiAwaitable objects and concurrently awaits them, producing a `std::vector<folly::Try<T>>` containing the results. Failure of individual operations can be determined by inspecting the corresponding `Try` value. This diff also refactors the existing implementations of `folly::coro::collectAll()` to make use of a new `Barrier` and `BarrierTask` implementation detail rather than using `DetachedInlineTask`, `Baton` and an atomic counter. This allows delaying the start of the child corouines until after all coroutines have been created which was necessary for cases where we didn't know the number of elements in the input range to allow storage for the results to be allocated in a vector before the tasks start producing results. Reviewed By: andriigrynenko Differential Revision: D14430147 fbshipit-source-id: 5ba4b7cdc3c9b65d1736f14a2d39f7beb6cb82b0
-
Orvid King authored
Summary: It's dead. Reviewed By: yfeldblum Differential Revision: D14191959 fbshipit-source-id: 8cfb68fa8f10b1f847bf6601aec8d869cb9c008d
-
Eric Niebler authored
Summary: To reflect the fact that the concept `SingleSender` is a refinement of `Sender` (there is no "`ManySender`"), rename `(any_)?(flow_)?many_sender` to `(any_)?(flow_)?sender`. Reviewed By: kirkshoop Differential Revision: D14803648 fbshipit-source-id: 5987ebe5ba877d0a3ab38e84b036f97302bcc70b
-
Eric Niebler authored
Summary: The pushmi library has grown to the point where a little more structure would aid comprehensibility. Also, finer-grained headers and build targets would make it easier for downstream projects to include only what they absolutely need. Reviewed By: kirkshoop Differential Revision: D14802895 fbshipit-source-id: 8d253f97c5d0529530cc3b7110505000f513ce83
-
Adam Norton authored
Summary: This is a performance optimization to avoid an executor re-queue for the collect[All] continuations which just move the result. The biggest problem with this now is that these futures are often on a thread pool backed with a blocking MPMCQueue which means the add can potentially deadlock. This diff is not meant as a true fix to the problem though; just an improvement. Reviewed By: yfeldblum Differential Revision: D14754908 fbshipit-source-id: e533bfa6b9d2d820d50422b612c1489b560ec9d5
-
Yedidya Feldblum authored
Summary: [Folly] `PriorityUnboundedBlockingQueue`, paralleling `UnboundedBlockingQueue` and `PriorityLifoSemMPMCQueue`. Reviewed By: andriigrynenko Differential Revision: D14536886 fbshipit-source-id: b3ea04c3f67d3e1e9d80626d963be70de1ae79ba
-
Yedidya Feldblum authored
Summary: [Folly] Cut traits for old-ABI `std::basic_string` under libstdc++. Reviewed By: pixelb Differential Revision: D14764155 fbshipit-source-id: fa4991f4b70fb407672212886c84f1be4c33581f
-
Lee Howes authored
Summary: For consistency adds thenExValue and deferExValue. Reviewed By: yfeldblum Differential Revision: D14793864 fbshipit-source-id: 700f02cfb27b93e1739c511f01142c30c1896990
-
Chad Austin authored
Summary: D14531266 defaulted static linking on macOS because of a link error in folly/stats. A better fix for the issue is instantiating the subclasses of BufferedStat, so add those. Reviewed By: andrewjcg Differential Revision: D14767345 fbshipit-source-id: eaa597dec468264595547f338348d7d74b49dd69
-
- 04 Apr, 2019 7 commits
-
-
Lee Howes authored
Summary: Renames defer taking an executor-taking continuation to deferExTry and modifying to take a KeepAlive for consistency with thenExTry. Reviewed By: yfeldblum Differential Revision: D14761230 fbshipit-source-id: af95afabb662197edcf2eeb432bc64c57011c776
-
Eric Niebler authored
Summary: Add coroutine support to pushmi by making all sender types that satisfy the `SingleTypedSender` concept awaitable; that is, you can get their result by `co_await`-ing them in a coroutine. In addition, all Awaitable types automatically satisfy the `SingleTypedSender` concept; that is, you can pass them to `pushmi::submit` along with a `Receiver` that is invoked with the result of `co_await`-ing the awaitable. Reviewed By: kirkshoop Differential Revision: D14688373 fbshipit-source-id: 8598b303aebcaa070033868abd440245c165bd73
-
Eric Niebler authored
Summary: Types opt in to receiver-ness with pushmi::receiver_traits, analogous to sender_traits (and std::iterator_traits). Alternatively, they can simply define a nested ::receiver_concept typedef that is an alias for one of "sink" or "flow". Reviewed By: kirkshoop Differential Revision: D14668335 fbshipit-source-id: 230abfcffef0cd231196b5f6a7ed05e1ac86ef0c
-
Eric Niebler authored
Summary: * The sender concepts are now defined in terms of a `sender_traits` class template, in which the user can specify additional sender metadata like what values and errors it sends to the Receiver. This will make it possible to automatically make Senders awaitable from within coroutines. * Remove the now-unused is_sender<>, is_single<>, and is_many<> properties. * Define a `SingleSender` concept and a `TypedSender` concept. * Define a `pushmi::sender` class template from which a Sender can inherit to declare the sender category (single/many/flow), and the types of the values and errors. Reviewed By: kirkshoop Differential Revision: D14631770 fbshipit-source-id: afcfd10bcd4e0e7ba224ea2c713d7fa92249ab7f
-
Andrii Grynenko authored
Reviewed By: lbrandy Differential Revision: D14766712 fbshipit-source-id: 78c84117aa1c35825c72eb4bcd04e0bebb20c67f
-
Lee Howes authored
Summary: Adds the option of providing a continuation that takes an executor and a Try. This way an executor is always available to child tasks. Uses a separate thenExTry API to avoid potential overload set ambiguity. Reviewed By: yfeldblum, andriigrynenko Differential Revision: D14726443 fbshipit-source-id: ab635c502c8a010b9b68af38add86ff7c200ff38
-
Yang Chi authored
Summary: it doesn't change any state Reviewed By: siyengar Differential Revision: D14296359 fbshipit-source-id: 0bb8acd1a55f2b6ed431adcd54b97e76b8f377f6
-
- 03 Apr, 2019 5 commits
-
-
Andrii Grynenko authored
Reviewed By: yfeldblum Differential Revision: D14719902 fbshipit-source-id: d3bc7b61d666c796c3c19f7fa198252acb472970
-
Amol Bhave authored
Summary: InlineFuctionRef fails to compile on 32-bit machines and fails the static assert. This diff makes the assert generic to add support for 32-bit as well. Reviewed By: yfeldblum Differential Revision: D14752182 fbshipit-source-id: eb00487248c93c6c32226cb227e8d119bcc7af7a
-
Stepan Palamarchuk authored
Summary: There's no need in the atomic refcount decrement from 1->0, because we're the last live reference and using it to bump 1->2 is already undefined behavior. Added benchmark: Before: ``` stepan@devvm329:~/fbsource/fbcode$ buck-out/opt/gen/folly/io/test/iobuf_benchmark --bm_min_usec=1000000 ============================================================================ folly/io/test/IOBufBenchmark.cpp relative time/iter iters/s ============================================================================ createAndDestroy 36.35ns 27.51M cloneOneBenchmark 40.40ns 24.75M cloneOneIntoBenchmark 27.03ns 37.00M cloneBenchmark 42.23ns 23.68M cloneIntoBenchmark 28.35ns 35.27M moveBenchmark 15.20ns 65.79M copyBenchmark 35.00ns 28.57M cloneCoalescedBaseline 334.59ns 2.99M cloneCoalescedBenchmark 660.01% 50.69ns 19.73M takeOwnershipBenchmark 50.57ns 19.78M ============================================================================ ``` After: ``` stepan@devvm329:~/fbsource/fbcode$ buck-out/opt/gen/folly/io/test/iobuf_benchmark --bm_min_usec=1000000 ============================================================================ folly/io/test/IOBufBenchmark.cpp relative time/iter iters/s ============================================================================ createAndDestroy 30.04ns 33.29M cloneOneBenchmark 41.27ns 24.23M cloneOneIntoBenchmark 26.37ns 37.92M cloneBenchmark 43.91ns 22.77M cloneIntoBenchmark 28.49ns 35.10M moveBenchmark 15.50ns 64.52M copyBenchmark 35.85ns 27.89M cloneCoalescedBaseline 318.49ns 3.14M cloneCoalescedBenchmark 643.69% 49.48ns 20.21M takeOwnershipBenchmark 45.15ns 22.15M ============================================================================ ``` Reviewed By: yfeldblum, davidtgoldblatt Differential Revision: D14715579 fbshipit-source-id: 3c0373b8423dda680920860979cfa240bf3d8d7a
-
Stepan Palamarchuk authored
Summary: `IOBufQueue` has packing logic, that would copy data instead of chaining `IOBufs`. However, that API unnecessary requires exclusive ownership of the chain. This diff adds an API that takes reference to IOBuf, copies as much as necessary and then clones/chains the rest. Reviewed By: yfeldblum Differential Revision: D14715581 fbshipit-source-id: e047d1c69ca19eec95a7adbca6df740440d23db3
-
Wez Furlong authored
Summary: `AlignedSysAllocator` doesn't implement the optional `rebind` or `size_type` portions of the C++ allocator concept. This is ok in GCC if the C++11 ABI is in use but causes compilation to fail with errors like these: ``` folly/Range.h: In instantiation of ‘void folly::Range<Iter>::res et(folly::Range<Iter>::string<Alloc>&) [with Alloc = folly::AlignedSysAllocator<char>; Iter = const char*; folly::Range<Iter>::string<Alloc> = std:: basic_string<char, std::char_traits<char>, folly::AlignedSysAllocator<char> >]’: folly/test/RangeTest.cpp:235:18: required from here folly/Range.h:420:27: error: ‘folly::Range<const char*>::string< folly::AlignedSysAllocator<char> >’ {aka ‘const class std::basic_string<char, std::char_traits<char>, folly::AlignedSysAllocator<char> >’} has no me mber named ‘size’ reset(str.data(), str.size()); ~~~~^~~~ ``` This diff works around this issue by only compiling in the problematic test if the C++11 ABI is enabled. Reviewed By: yfeldblum Differential Revision: D14702585 fbshipit-source-id: ea0c5fcfb0d69994d2958c2c236fe002959c824d
-
- 02 Apr, 2019 17 commits
-
-
Joe Loser authored
Summary: - Replace a wordy type alias in `Future-inl.h` to use `remove_cvref_t`. Pull Request resolved: https://github.com/facebook/folly/pull/1099 Differential Revision: D14721023 Pulled By: yfeldblum fbshipit-source-id: e9de76a851162163046dfa088a8cc7e5a075562c
-
Orvid King authored
Summary: The eventual plan will ban the use of `to/fromFd` on `NetworkSocket` when compiling on Windows. Reviewed By: yfeldblum Differential Revision: D14592244 fbshipit-source-id: cbf965f6822cbd5b6b1098c7dab9ab65aafd8192
-
Stepan Palamarchuk authored
Summary: 1) There's no need to exit the loop if we encounter and IOBuf of length 0. 2) We should do `n <= tailroom()` instead of `n < tailroom()`. Reviewed By: yfeldblum Differential Revision: D14715582 fbshipit-source-id: 9a30454bd536929414f7c9013dbcf6e59e6e7f2c
-
Wez Furlong authored
Summary: was trying to see if I could repro the issue described here: Refs: https://github.com/facebook/folly/issues/1092 Reviewed By: yfeldblum Differential Revision: D14702579 fbshipit-source-id: d90cbf5742883a26d9ac5dbfd56eed1965cbc64e
-
Wez Furlong authored
Summary: Running down various warning/error issues is proving to be a tiresome game of wackamole. Here's the latest issue: ``` folly/container/test/F14TestUtil.h:400:16: error: ?void* mem std::memcpy(p, &n, sizeof(std::size_t)); ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /opt/rh/devtoolset-8/root/usr/include/c++/8/bits/stl_algobase.h:64, from /opt/rh/devtoolset-8/root/usr/include/c++/8/bits/char_traits.h:39, from /opt/rh/devtoolset-8/root/usr/include/c++/8/string:40, from /opt/rh/devtoolset-8/root/usr/include/c++/8/stdexcept:39, from /data/users/wez/scratch/dataZusersZwezZfbsource/fbcode_builder_getdeps/shipit/folly/folly/container/F14Map.h:30, from /data/users/wez/scratch/dataZusersZwezZfbsource/fbcode_builder_getdeps/shipit/folly/folly/container/test/F14MapTest.cpp:17 /opt/rh/devtoolset-8/root/usr/include/c++/8/bits/stl_pair.h:198:12: note: ?struct std::pair<const std::basic_string<char>, int>? declared here struct pair ^~~~ ``` The targeted solution is to use `-Wno-class-memaccess` as we do with our internal builds, but that is a gcc-specific option that fails when used with the apple clang compiler. The simplest option is just to disable warning->error promotion in the cmake build, as it feels like a losing battle to keep chasing the different combinations/permutations. Reviewed By: yfeldblum Differential Revision: D14702575 fbshipit-source-id: d8daa6c9588e7c84c991a0ef86baf700bd32fe8c
-
Wez Furlong authored
Summary: move the FindGMock to the common cmake library and adjust folly and wangle to consume it from there. Reviewed By: strager Differential Revision: D14710329 fbshipit-source-id: 35ac9d6d2ec03468f389f5b9f1c126b007c7c798
-
Wez Furlong authored
Summary: In D14702587 I made a change to workaround an ICE in gcc 8. It turns out to be a gift that keeps giving; with the code as-is on windows we now encounter: ``` folly\io\async\test\AsyncTimeoutTest.cpp(29): error C3493: 'expected' cannot be implicitly captured because no default capture mode has been specified ``` Adding `expected` to the capture list yields this error with gcc, either with or without the reference: ``` stderr: folly/io/async/test/AsyncTimeoutTest.cpp:29:45: error: lambda capture 'expected' is not required to be captured for this use [-Werror,-Wunused-lambda-capture] AsyncTimeout::make(manager, [&value, &expected]() noexcept { value = expected; }); ~~~^~~~~~~~ 1 error generated. ``` the solution is to make `expected` not be `const`. Reviewed By: yfeldblum Differential Revision: D14721418 fbshipit-source-id: b65c17414c161b9dee7f269b2e2a22a980766a6c
-
Michael Park authored
Summary: It was observed in D14238146 that `ThreadPoolExecutor::numThreads()` is not marked `const`, and it seems that it really should be. This patch marks that function `const` as well as others in this class that seems they should be `const`. Reviewed By: yfeldblum Differential Revision: D14681960 fbshipit-source-id: f274b9788ae7e27d6bec22aec2818abeb6441531
-
Yedidya Feldblum authored
Summary: [Folly] `PriorityUnboundedQueueSet`, wrapping `UnboundedQueue`. Reviewed By: andriigrynenko Differential Revision: D14719777 fbshipit-source-id: 529ddd8de5879908e36f6fc26e7a091230cb03da
-
Wez Furlong authored
Summary: ``` folly/io/async/test/AsyncTimeoutTest.cpp: In lambda function: folly/io/async/test/AsyncTimeoutTest.cpp:31:70: internal compiler error: Segmentation fault AsyncTimeout::make(manager, [&]() noexcept { value = expected; }); ^ Please submit a full bug report, with preprocessed source if appropriate. See <http://bugzilla.redhat.com/bugzilla> for instructions. ``` I'm using: ``` $ /opt/rh/devtoolset-8/root/usr/bin/c++ --version c++ (GCC) 8.2.1 20180801 (Red Hat 8.2.1-2) Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ``` This has been fixed in gcc 8.3, but the workaround is to explicitly name the captures as is done in this diff. Reviewed By: yfeldblum Differential Revision: D14702587 fbshipit-source-id: 1998ef5de8eb4df520edcc41fdc9cd9547dec824
-
Wez Furlong authored
Summary: I finally got to the bottom of the weird `-levent` or `event.lib` linker errors that crop up in the cmake builds. The issue is that if you have installed a recent libevent it deploys a cmake CONFIG package that exports just a bare `event` target as the dep on libevent. This is unfortunate because it is interpreted as meaning `-levent` with no library path, which for an installation of libevent that is not in the default path will result in linker errors in libraries downstream of folly. To resolve this, I've given the common `FindLibEvent.cmake` file (that was derived from the folly library of the same name) a similar treatment to the recent changes to find glog and taught it how to locate libevent from a config package and to fall back on a basic include/library check. If we find an `event` target then we extract the actual library path from it and export that. I've removed folly's and wangle's own FindLibEvent.cmake so that it will pick up the common library which gets shipit sync'd out to https://github.com/facebook/folly/blob/master/CMake/FindLibEvent.cmake and https://github.com/facebook/wangle/blob/master/build/fbcode_builder/CMake/FindLibEvent.cmake Reviewed By: yfeldblum Differential Revision: D14702577 fbshipit-source-id: d35d9f741e009dcd77976c0637ba3024a8a4aef3
-
Wez Furlong authored
Summary: ``` folly/experimental/test/FutureDAGTest.cpp:46:7: error: ‘source_node’ may be used uninitialized in this function [-Werror=maybe-uninitialized] if (it->first != source_node) { ^~ cc1plus: all warnings being treated as errors ``` Reviewed By: yfeldblum Differential Revision: D14702569 fbshipit-source-id: 949ecde007a8d84498c5d87f4a4c2db463ba83a9
-
Wez Furlong authored
Summary: ``` folly/folly/io/test/IOBufCursorTest.cpp:212:3: folly/folly/io/Cursor.h:411:13: error: ‘void* memcpy(void*, const void *, size_t)’ forming offset [13, 20] is out of the bounds [0, 12] of object ‘buf’ with type ‘char [12]’ [-Werror=array-bounds] memcpy(buf, data(), len); ~~~~~~^~~~~~~~~~~~~~~~~~ ``` Reviewed By: yfeldblum Differential Revision: D14702563 fbshipit-source-id: 3697a021d71bccfae9d8833b42a0c25e916b7a78
-
Wez Furlong authored
Summary: ``` folly/experimental/test/LockFreeRingBufferTest.cpp:279:14: error : ‘char* strncpy(char*, const char*, size_t)’ output may be truncated copying 1023 bytes from a string of length 1023 [-Werror=stringop-truncation] strncpy(data_, data.data_, sizeof(data_) - 1); ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``` Reviewed By: yfeldblum Differential Revision: D14702561 fbshipit-source-id: 8f85c758c7afc99eeb1f95920511fb4195eafbbe
-
Lewis Baker authored
Summary: Making the `co_scoped_lock()` and `co_lock()` operations semi-awatitable forces the caller to provide an executor on which to resume the awaiting coroutine in the case that the lock could not be acquire synchronously. This improves the safety of folly::coro::Mutex when used from within an InlineTask which does not implicitly wrap all co_await expressions to ensure transitions back to the executor and would otherwise implicitly resume the next lock-acquirer inline inside the call to .unlock(). Reviewed By: andriigrynenko Differential Revision: D14708636 fbshipit-source-id: bb9cda1a4a6e53978071a7b98ebf9affeef47c7d
-
Joe Loser authored
Summary: - Instead of defining a separate `assume_unreachable` wrapper macro for support on different compilers, use the one directly from `folly/lang/Assume.h` which is spelled `folly::assume_unreachable`. - Since the `assume_unreachable` wrapper in `FBString.h` was the only thing using FBString's wrapper around `always_inline` for various compilers as well, we can remove that as well. Pull Request resolved: https://github.com/facebook/folly/pull/1079 Reviewed By: yfeldblum Differential Revision: D14605330 Pulled By: Orvid fbshipit-source-id: ec5529d8913fcec0a7eb03bce006d8fec71d525b
-
Dan Melnic authored
Round up microseconds to nearest millisecond value in the default TimeoutManager::scheduleTimeoutHighRes implementation Summary: Round up microseconds to nearest millisecond value in the default TimeoutManager::scheduleTimeoutHighRes implementation (Note: this ignores all push blocking failures!) Reviewed By: yfeldblum Differential Revision: D14702027 fbshipit-source-id: b0c710c25c1d9b92ebf28e490507eb3dc3f4db31
-