- 13 Dec, 2017 1 commit
-
-
Adam Simpkins authored
Summary: Add several new documents describing the behavior of the folly logging library. Reviewed By: yfeldblum Differential Revision: D6525997 fbshipit-source-id: 8ba2ff99c70c7566987b3da321526a16755e72bf
-
- 12 Dec, 2017 6 commits
-
-
Yedidya Feldblum authored
Summary: Switch to the `try_wait_for` and `try_wait_until` `Baton` APIs. Reviewed By: davidtgoldblatt Differential Revision: D6532103 fbshipit-source-id: aa3ce64152d167bb9c9cb1f266be0f9f8bd498f5
-
Andrii Nakryiko authored
Summary: It looks like not having offset/size/filename information is way more harmful, than storing filename just for the sake of this error message. Reviewed By: yfeldblum Differential Revision: D6536616 fbshipit-source-id: 469fbdf1deedd76ebd79cf98716c2c269cb10e4d
-
Yedidya Feldblum authored
Summary: [Folly] Assorted tweaks to `folly/String.h`. * Use `void_t` in the definition of `IsConvertible`. * Remove `AllConvertible`. Callers can use `StrictConjunction` instead. * Move the `static_assert`s from the header to the source file. Reviewed By: andrewjcg, ot Differential Revision: D6501515 fbshipit-source-id: 472ecf23bf7f06be211480b0aceea95f7e60dc21
-
Neel Goyal authored
Summary: In some cases, SSLContextManager seg faults if a cert and key do not match. This guards against that case when strictSSL = false, and throws a more useful error in the cases when SSL is required. Reviewed By: xybu Differential Revision: D6513964 fbshipit-source-id: 8e63a22b346fd3f2a30d558a3659ab6794c7a105
-
Yedidya Feldblum authored
Summary: [Folly] `folly::fibers::Baton` API consistency with `folly::Baton`. Specifically, the suite of `wait`, `try_wait`, `try_wait_for`, and `try_wait_until` members and member templates. Hold onto the `timed_wait` members for now, but mark them deprecated. Additionally, for consistency, offer main-context function params consistently for all `try_wait_for`, `try_wait_until`, and both variants of `timed_wait`. Reviewed By: andriigrynenko Differential Revision: D6531145 fbshipit-source-id: 960fba48716b12b0ef53262786eacab88d8b2375
-
Nick Terrell authored
Summary: Content size 0 as unknown is deprecated. See code comments for details. Reviewed By: felixhandte Differential Revision: D6521582 fbshipit-source-id: 876b94cc0123c1020b456cc8f4cd86997afe0619
-
- 10 Dec, 2017 4 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Remove multi-poster support from `Baton`. Code which needs multi-poster support may use `SaturatingSemaphore` instead. Reviewed By: magedm Differential Revision: D6529661 fbshipit-source-id: d9dc053ca984ef3a404e9361910b0044817d4905
-
Andrew Gallagher authored
Reviewed By: Orvid Differential Revision: D6387412 fbshipit-source-id: 4c1424ed4fa49e69885de8cd72e78169314fc502
-
Maged Michael authored
Summary: Remove include not needed after recent change Reviewed By: yfeldblum Differential Revision: D6529608 fbshipit-source-id: 904072084e180125d68bd1ef6e4dffb2939cd1eb
-
Yedidya Feldblum authored
Summary: [Folly] Fix signed integer overflow in `StaticTracepointTest.cpp`. It is undefined behavior and is caught by UBSAN in some test runs. Reviewed By: Orvid Differential Revision: D6528445 fbshipit-source-id: e4a199e9005b57bcd93c8c4b69f37ccb1e072bdf
-
- 09 Dec, 2017 3 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Split `Baton` wait methods into fast and slow paths. Force-inline the fast paths, and force-outline the slow paths. Reviewed By: magedm Differential Revision: D6501992 fbshipit-source-id: 611e26b3cfeef01eb8d3a3500ae3ebc26bee6e86
-
Yedidya Feldblum authored
Summary: [Folly] Fix UBSAN failure in `RangeTest.cpp` with `libstdc++-v4.9`. The implementation of `std::array` in `libstdc++-v4.9` has undefined behavior in the case of the zero-length array - dereferencing (but immediately taking the address again) of `nullptr`. This is fixed in `libstdc++-v5`. Reviewed By: ot Differential Revision: D6528614 fbshipit-source-id: 26be6bdc28d9e6dc6e6293a4d4ecffd769c01413
-
Yedidya Feldblum authored
Summary: As above. Thanks magedm for giving us this beautiful piece of equipment! Reviewed By: magedm Differential Revision: D6488661 fbshipit-source-id: 95aa9646ca1ea937bb1d055e9baa037896c3161e
-
- 08 Dec, 2017 4 commits
-
-
Maged Michael authored
Summary: - Add a template parameter, LgAlign, to control memory usage. The parameter is used in DynamicBoundedQueue. - Refactor code. Reviewed By: yfeldblum Differential Revision: D6508015 fbshipit-source-id: 6e17b1d8fd900595147dc4217e04d379a13fbdf8
-
Yedidya Feldblum authored
Summary: [Folly] Move `folly/Bits.h` to `folly/lang/`. Reviewed By: phoad, Orvid Differential Revision: D6495547 fbshipit-source-id: a93159321df8277f8a4b4f10a5e4e0fc58cb6022
-
Eric Niebler authored
Summary: If the folly::Function returns by const& and the wrapped function returns a prvalue, it is guaranteed to return a dangling reference. Prevent it. Reviewed By: yfeldblum, aary Differential Revision: D6487447 fbshipit-source-id: 61700b4688e29409eefa27f546b31ecac258cfdd
-
Adam Simpkins authored
Summary: Update string literals with escaped quotes and backslashes to use raw string literal syntax instead. Reviewed By: yfeldblum Differential Revision: D6501426 fbshipit-source-id: 557366f86b360596b13148d03fd33c7df5c3f890
-
- 07 Dec, 2017 10 commits
-
-
Maged Michael authored
Summary: Use SaturatingSemaphore instead of multi-poster and non-blocking Baton, in preparation for restoring Baton to being single-poster and with blocking wait(). Reviewed By: davidtgoldblatt Differential Revision: D6510619 fbshipit-source-id: eed87beabc1b698080b8e41c746d570d30804ce7
-
Yedidya Feldblum authored
Summary: [Folly] Fix crash in `exception_wrapper::get_exception<>`. When the contained object is unthrown and does not inherit `std::exception`, `get_exception` templated over a type that does not inherit `std::exception` must throw and catch internally and may then return a pointer to the internally thrown object, which has since been deallocated. Attempting to dereference that pointer is undefined behavior is correctly caught by ASAN as heap-use-after-free. Fix it by storing objects not inheriting `std::exception` using only the `std::exception_ptr` representation. As a downside, we no longer get the small-object optimization or the non-throwing optimization for objects which do not inherit `std::exception`. But this is not likely to be terribly concerning in practice. Reviewed By: ericniebler Differential Revision: D6504911 fbshipit-source-id: 0065de911733b5cab87be55e7e4e47f0a9c09140
-
Yedidya Feldblum authored
Summary: [Folly] Use simpler tags for ctor dispatch in `exception_wrapper`. The tags do not need to be `std::integral_constant`, but can just be arbitrary empty types. Also format the usage sites of the tags. Reviewed By: ericniebler Differential Revision: D6506417 fbshipit-source-id: 377359086d94fc1a8bf8eebf6f8b058ff544829f
-
Stepan Palamarchuk authored
Summary: glog actually tries to pull srtings from these pointers when the checks fail, which obfuscates the error Reviewed By: yfeldblum Differential Revision: D6506886 fbshipit-source-id: 0283e02aecaa248b84fca1433d3f29f92c37b2e6
-
Mehdi Bouaziz authored
Summary: deadcode Reviewed By: ddrcoder Differential Revision: D6498754 fbshipit-source-id: 9dda0ade6928d648b8938a06b185e430753f2318
-
Andrii Grynenko authored
Reviewed By: yfeldblum Differential Revision: D6503762 fbshipit-source-id: f82b88c401979761053004eadd2e4c6a74f05f9c
-
Adam Simpkins authored
Summary: This updates the LogHandlerConfig code to allow changing the settings on an existing log handler without listing all of its existing options from scratch. This also changes the syntax of the basic log handler configuration string to use a colon to separate the log handler name+type from the options list. In other words, rather than specifying `default=stream,stream=stderr,async=true` you now say `default=stream:stream=stderr,async=true`. The primary motivation for this change is to make it easy for users to switch the async setting for the default log handler on or off. Callers can now specify `default:async=true` to easily enable async mode on the default log handler without having to completely re-list the full settings for the default handler. Reviewed By: yfeldblum Differential Revision: D6494228 fbshipit-source-id: 52a296f800a5456f0c3aa10546298139c8db52fc
-
Adam Simpkins authored
Summary: Split FileHandlerFactory into separate FileHandlerFactory and StreamHandlerFactory classes, where FileHandlerFactory only handles logging to files by path name, and StreamHandlerFactory only supports logging to stdout or stderr. The primary motivation for this is to allow logging to stdout or stderr in some cases without allowing arbitrary files to be opened by FileHandlerFactory. This can be achieved now by registering StreamHandlerFactory but not FileHandlerFactory. This makes it safer to allow controlling logging configuration via command line flags even in setuid binaries. Reviewed By: yfeldblum Differential Revision: D6494226 fbshipit-source-id: a3ec371ca4266424d07dff20be18e6e13c057593
-
Adam Simpkins authored
Summary: This moves some of the FileHandlerFactory code out into a new StandardLogHandlerFactory helper class. This will make it easier in the future to add new LogHandlerFactory implementations that create StandardLogHandler objects. In particular, I plan to use this soon to split FileHandlerFactory into two separate classes: one for writing to files on disk and a separate class for writing to stdout or stderr. Reviewed By: yfeldblum Differential Revision: D6494227 fbshipit-source-id: 52e24250d020d21a5395d2a68fa5bd40bb32fbd4
-
Louis Brandy authored
Summary: Move constructors are just like any other constructors. `this` is not in a valid state. You aren't supposed to destroy `this` before move-constructing it. This was detected by ubsan stress runs. UBSAN report: ``` [ RUN ] TemporaryFile.moveCtor folly/experimental/TestUtil.cpp:91:20: runtime error: load of value 3, which is not a valid value for type 'bool' [ failed: 1 ] ```` Reviewed By: yfeldblum Differential Revision: D6501500 fbshipit-source-id: 83bd0525ac2c1f5951f70f5596034bb6cb0ca985
-
- 06 Dec, 2017 4 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Rename `Baton::timed_wait` to `try_wait_for` and `try_wait_until`. For consistency with `std::timed_mutex`'s suite of `lock` member functions, as well as `SaturatingSemaphore` and others. Reviewed By: davidtgoldblatt Differential Revision: D6493714 fbshipit-source-id: 566c6d5dc0f6db4a0308cbd1972d53794f898383
-
Yedidya Feldblum authored
Summary: [Folly] Move `folly/Baton.h` to `folly/synchronization/`. Reviewed By: phoad, Orvid Differential Revision: D6490282 fbshipit-source-id: 66e2d25ffe3275d576b97b81c1987709000f6649
-
Yedidya Feldblum authored
Summary: [Folly] Use `boost::filesystem::current_path` in `ChangeToTempDir`. It will report failures noisily. Reviewed By: pixelb Differential Revision: D6493243 fbshipit-source-id: 423dc0e3a46781e9af42fee69060d31085f1a7c6
-
Liang Zhu authored
Reviewed By: yfeldblum Differential Revision: D6482348 fbshipit-source-id: 5b2d3c984b761a54d5a9eba48953c556ed22cda6
-
- 05 Dec, 2017 6 commits
-
-
Pingjia Shan authored
Summary: Upon debugging for the attached task, it appears to me the problem are in two places: . After a callback has been run, context_ wasn't reset . After a callback has been canceled, context_ wasn't reset In this diff: . Fix these two places. . Updating unit tests to cover these two cases. Reviewed By: yfeldblum Differential Revision: D6465788 fbshipit-source-id: 85b3b29dc80c9f3971c85f302385d41ded44fa0e
-
Aaryaman Sagar authored
Split get_default() into two for deferred default construction and added forwarding to speed up default element construction with rvalues Summary: As it stood currently folly::get_default() would unnecessarily construct a value into the third parameter, which was unnecessary in the code path where the element was found in the map. Also the default value can be forwarded to the return type in the code path where the element is not found and an rvalue parameter is passed as the default value Reviewed By: yfeldblum Differential Revision: D6390315 fbshipit-source-id: ef692b827d5a36751b4eb1e12042869e8fbba2e5
-
Dave Watson authored
Summary: Adds a bitreverse function to Bits.h AFAIK there is no great way to do this on x86, takes ~4-5ns. arm has a single instruction we can drop in in the future. Reviewed By: yfeldblum Differential Revision: D6459283 fbshipit-source-id: 129db196b2fac95386f601ae57843aa87523b915
-
Liang Zhu authored
Summary: In the latest stable kernel 4.14.3 as of 2017-12-04, unix domain socket does not support MSG_ERRQUEUE. So recvmsg(MSG_ERRQUEUE) will read application data from unix doamin socket as error message, which breaks the message flow in application. This diff disable setErrMessageCB for Unix Domain Socket. Both [[ https://github.com/torvalds/linux/blob/master/net/ipv4/tcp.c#L1782 | tcp_recvmsg ]] and [[ https://github.com/torvalds/linux/blob/master/net/ipv4/udp.c#L1571 | udp_recvmsg ]] will check flag MSG_ERRQUEUE and read from error queue. However, there is nothing about MSG_ERRQUEUE in [[ https://github.com/torvalds/linux/blob/master/net/unix/af_unix.c#L2249 | af_unix ]]. Reviewed By: yfeldblum Differential Revision: D6479465 fbshipit-source-id: eba2c8650e96466f2b361a42ddf90053d65f19bd
-
Yedidya Feldblum authored
Summary: [Folly] Add missing check against `SemiFuture` in `FutureBase` ctor. Reviewed By: LeeHowes Differential Revision: D6469021 fbshipit-source-id: 0ca31461afee4bf64725e065a8cb4d5e933d2013
-
Nathan Bronson authored
Summary: /proc may be unavailable in restricted environments, which can cause pthread_getattr_np to fail. This diff adds checking to the return code from that function. Reviewed By: yfeldblum Differential Revision: D6473789 fbshipit-source-id: de016d32f29edf8410808dfb491987692f39e768
-
- 04 Dec, 2017 2 commits
-
-
Stepan Palamarchuk authored
Summary: Currently QueueAppender needs to follow a chain of 4 indirections (QueueAppender->IOBufQueue->IOBuf(head)->IOBuf(tail)->data). This diff adds a cache of writable tail range in IOBufQueue and allows it to be placed externally. Before this diff on hot path QueueAppender::write<signed char> was ~167 bytes of code (with majority being actually executed), after this diff it's down to ~30 bytes: 0x0000000000419d10 <+0>: mov (%rdi),%rax 0x0000000000419d13 <+3>: cmp %rax,0x8(%rdi) 0x0000000000419d17 <+7>: je 0x419d28 <folly::io::QueueAppender::write<signed char>(signed char)+24> 0x0000000000419d19 <+9>: mov %sil,(%rax) 0x0000000000419d1c <+12>: addq $0x1,(%rdi) 0x0000000000419d20 <+16>: retq 0x0000000000419d21 <+17>: nopl 0x0(%rax) 0x0000000000419d28 <+24>: movsbl %sil,%esi 0x0000000000419d2c <+28>: jmpq 0x419ca0 <folly::io::QueueAppender::writeSlow<signed char>(signed char)> With this diff, Thrift serialization performance is improved up to 2x with production workloads (2x for compact, 3x for binary). Thrift benchmark output: Before: ============================================================================ thrift/lib/cpp2/test/ProtocolBench.cpp relative time/iter iters/s ============================================================================ BinaryProtocol_write_Empty 58.05ns 17.23M BinaryProtocol_write_SmallInt 75.17ns 13.30M BinaryProtocol_write_BigInt 74.60ns 13.41M BinaryProtocol_write_SmallString 85.12ns 11.75M BinaryProtocol_write_BigString 802.96ns 1.25M BinaryProtocol_write_BigBinary 174.69ns 5.72M BinaryProtocol_write_LargeBinary 171.81ns 5.82M BinaryProtocol_write_Mixed 130.97ns 7.64M BinaryProtocol_write_SmallListInt 123.99ns 8.06M BinaryProtocol_write_BigListInt 40.72us 24.56K BinaryProtocol_write_BigListMixed 784.78us 1.27K BinaryProtocol_write_LargeListMixed 98.84ms 10.12 CompactProtocol_write_Empty 64.38ns 15.53M CompactProtocol_write_SmallInt 76.74ns 13.03M CompactProtocol_write_BigInt 83.62ns 11.96M CompactProtocol_write_SmallString 86.05ns 11.62M CompactProtocol_write_BigString 786.18ns 1.27M CompactProtocol_write_BigBinary 184.91ns 5.41M CompactProtocol_write_LargeBinary 182.12ns 5.49M CompactProtocol_write_Mixed 120.89ns 8.27M CompactProtocol_write_SmallListInt 119.74ns 8.35M CompactProtocol_write_BigListInt 43.76us 22.85K CompactProtocol_write_BigListMixed 595.90us 1.68K CompactProtocol_write_LargeListMixed 72.80ms 13.74 ============================================================================ After: ============================================================================ thrift/lib/cpp2/test/ProtocolBench.cpp relative time/iter iters/s ============================================================================ BinaryProtocol_write_Empty 65.97ns 15.16M BinaryProtocol_write_SmallInt 72.31ns 13.83M BinaryProtocol_write_BigInt 72.67ns 13.76M BinaryProtocol_write_SmallString 77.56ns 12.89M BinaryProtocol_write_BigString 782.07ns 1.28M BinaryProtocol_write_BigBinary 179.69ns 5.57M BinaryProtocol_write_LargeBinary 182.62ns 5.48M BinaryProtocol_write_Mixed 91.62ns 10.92M BinaryProtocol_write_SmallListInt 96.22ns 10.39M BinaryProtocol_write_BigListInt 19.65us 50.90K BinaryProtocol_write_BigListMixed 245.69us 4.07K BinaryProtocol_write_LargeListMixed 46.56ms 21.48 CompactProtocol_write_Empty 74.44ns 13.43M CompactProtocol_write_SmallInt 80.35ns 12.45M CompactProtocol_write_BigInt 85.30ns 11.72M CompactProtocol_write_SmallString 82.61ns 12.10M CompactProtocol_write_BigString 784.77ns 1.27M CompactProtocol_write_BigBinary 193.20ns 5.18M CompactProtocol_write_LargeBinary 192.53ns 5.19M CompactProtocol_write_Mixed 99.78ns 10.02M CompactProtocol_write_SmallListInt 104.77ns 9.54M CompactProtocol_write_BigListInt 25.62us 39.03K CompactProtocol_write_BigListMixed 272.42us 3.67K CompactProtocol_write_LargeListMixed 38.32ms 26.09 ============================================================================ QueueAppender Benchmark output (although not very representative due to a tight loop): Before: ============================================================================ folly/io/test/QueueAppenderBenchmark.cpp relative time/iter iters/s ============================================================================ write_uint8 10.50us 95.20K write_uint16 5.48us 182.49K write_uint32 2.73us 366.22K push_64b 9.77us 102.36K push_1024b 112.87us 8.86K append 64.21us 15.57K preallocate_postallocate_1b 16.34us 61.19K preallocate_postallocate_4b 15.56us 64.26K preallocate_postallocate_32b 22.17us 45.11K preallocate_postallocate_256b 149.55us 6.69K ============================================================================ After: ============================================================================ folly/io/test/QueueAppenderBenchmark.cpp relative time/iter iters/s ============================================================================ write_uint8 8.86us 112.81K write_uint16 3.91us 255.68K write_uint32 2.08us 481.78K push_64b 8.24us 121.39K push_1024b 115.50us 8.66K append 67.52us 14.81K preallocate_postallocate_1b 13.86us 72.17K preallocate_postallocate_4b 11.67us 85.71K preallocate_postallocate_32b 20.35us 49.14K preallocate_postallocate_256b 148.57us 6.73K ============================================================================ Reviewed By: yfeldblum Differential Revision: D6427749 fbshipit-source-id: 8495cc74b6106b15d201e37533ae4c0a1abc9d74
-
Dave Watson authored
Summary: Adds an AdFork::unregisterHandler command, such that we can register and unregister fork handlers. Reviewed By: yfeldblum Differential Revision: D6439796 fbshipit-source-id: b710152f8cf98371c330b484cd5fe42de44e74ac
-