- 04 Dec, 2017 3 commits
-
-
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
-
Maged Michael authored
Summary: UnboundedQueue supports: - SPSC, MPSC, SCMP, MPMC - Non-waiting, waiting, and timed consumer operations. - Producers never wait or fail (unless out-of-memory). - Memory usage grows and shrinks dynamically ``` /// UnboundedQueue supports a variety of options for unbounded /// dynamically expanding an shrinking queues, including variations of: /// - Single vs. multiple producers /// - Single vs. multiple consumers /// - Blocking vs. spin-waiting /// - Non-waiting, timed, and waiting consumer operations. /// Producer operations never wait or fail (unless out-of-memory). /// /// Template parameters: /// - T: element type /// - SingleProducer: true if there can be only one producer at a /// time. /// - SingleConsumer: true if there can be only one consumer at a /// time. /// - MayBlock: true if consumers may block, false if they only /// spins. A performance tuning parameter. /// - LgSegmentSize (default 8): Log base 2 of number of elements per /// segment. A performance tuning parameter. See below. /// /// When to use UnboundedQueue: /// - If a small bound may lead to deadlock or performance degradation /// under bursty patterns. /// - If there is no risk of the queue growing too much. /// /// When not to use UnboundedQueue: /// - If there is risk of the queue growing too much and a large bound /// is acceptable, then use DynamicBoundedQueue. /// - If the queue must not allocate on enqueue or it must have a /// small bound, then use fixed-size MPMCQueue or (if non-blocking /// SPSC) ProducerConsumerQueue. /// /// Template Aliases: /// USPSCQueue<T, MayBlock, LgSegmentSize> /// UMPSCQueue<T, MayBlock, LgSegmentSize> /// USPMCQueue<T, MayBlock, LgSegmentSize> /// UMPMCQueue<T, MayBlock, LgSegmentSize> /// /// Functions: /// Producer operations never wait or fail (unless OOM) /// void enqueue(const T&); /// void enqueue(T&&); /// Adds an element to the end of the queue. /// /// Consumer operations: /// void dequeue(T&); /// Extracts an element from the front of the queue. Waits /// until an element is available if needed. /// bool try_dequeue(T&); /// Tries to extracts an element from the front of the queue /// if available. Returns true if successful, false otherwise. /// bool try_dequeue_until(T&, time_point& deadline); /// Tries to extracts an element from the front of the queue /// if available until the specified deadline. Returns true /// if successful, false otherwise. /// bool try_dequeue_for(T&, duration&); /// Tries to extracts an element from the front of the queue /// if available for for the specified duration. Returns true /// if successful, false otherwise. /// /// Secondary functions: /// size_t size(); /// Returns an estimate of the size of the queue. /// bool empty(); /// Returns true only if the queue was empty during the call. /// Note: size() and empty() are guaranteed to be accurate only if ``` Reviewed By: djwatson Differential Revision: D6157613 fbshipit-source-id: db423f86d1d0604d22f6b9c71ea0ed08be32e2a1
-
Anirudh Ramachandran authored
Summary: X509_digest, or the "fingerprint" of the cert, is useful to identify certificates with the same CN/SANs. This adds an API to get the SHA1 or SHA256 digest of a cert. Reviewed By: yfeldblum Differential Revision: D6457917 fbshipit-source-id: 148a5a2270e938b39065e00d7947c2fc57cd7f75
-
- 03 Dec, 2017 1 commit
-
-
Alastair Daivis authored
Summary: AFAICT this is currently the only thing preventing the non-dynamic version of Folly's MPMCQueue from being allocation-free on enqueue and dequeue operations. Allocating this with a constant expression should move the allocation from runtime to link (possibly compile?) time, which will let us use it in allocation sensitive contexts. Feel free to suggest other reviewers, I couldn't find an existing folly reviewer group. Reviewed By: yfeldblum, agola11, nbronson Differential Revision: D6447848 fbshipit-source-id: 86b84b19d62f1e1bcecdb9e757a6dfa90597b084
-
- 02 Dec, 2017 4 commits
-
-
David Goode authored
Summary: As in title, for eg larger stack size Reviewed By: yfeldblum Differential Revision: D6466762 fbshipit-source-id: 303e8732c8bfb64fbd8619163779942fe5f8b5a8
-
Adam Simpkins authored
Summary: Add makeSystemError() helper functions that are similar to the existing throwSystemError() functions but just return the exception rather than throwing it. This is helpful for callers using folly::Expected or folly::Future, where they need to return an exception type rather than throwing it. This also includes comments about the fact that this code is using the wrong error category. The C++ standard indicates that std::generic_category() for POSIX errno values. I am not fixing this as part of this diff, since this change has the potential to break existing users, and would need a fair amount of testing first. Reviewed By: yfeldblum Differential Revision: D6456771 fbshipit-source-id: 4724b51b8d4a7f513ae70ea1b0c4f0516cfc205f
-
Adam Simpkins authored
Summary: Add an explicit `std::move()` around the return value of `logConfigToDynamic()`. This explicit move is required pre-C++14, but is not required after DR 1579: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1579 Newer versions of g++ and clang no longer require the move. However gcc versions earlier than 5.0 do require it. Reviewed By: yfeldblum Differential Revision: D6466447 fbshipit-source-id: 1b15934490d4966e9b3e5612e0e2ecbb43c979ca
-
Adam Simpkins authored
Summary: Replace the initLoggingGlogStyle() function with a more generic initLogging() function that accepts a log config string to be parsed with parseLogConfig(). Reviewed By: bolinfest, yfeldblum Differential Revision: D6342086 fbshipit-source-id: fb1bffd11f190b70e03e2ccbf2b30be08d655242
-
- 01 Dec, 2017 4 commits
-
-
Igor Sugak authored
Reviewed By: yfeldblum Differential Revision: D6453972 fbshipit-source-id: fa083c0b782188f5f45a2a354045aee03e528829
-
Adam Simpkins authored
Summary: Implement conversions between std::chrono::duration and POSIX-style time structures even when neither the numerator nor the denominator of the duration ratio are 1. Both of these are done by first converting to an intermediate type where the numerator is 1, and then using the conversion routines for that case. Reviewed By: yfeldblum Differential Revision: D6366647 fbshipit-source-id: 8f9495fb4101cac6d8b4cf0353a679107007b298
-
Dave Watson authored
Summary: As title Reviewed By: yfeldblum Differential Revision: D6440723 fbshipit-source-id: 3168d7bb616ae0ff3fe42f7584c5a255c4953875
-
Bin Liu authored
Summary: Fix bug in non-jemalloc build. (Note: this ignores all push blocking failures!) Reviewed By: igorsugak Differential Revision: D6451342 fbshipit-source-id: 44725d4e0c685a59325fa3d08877d0f62120c5c2
-
- 30 Nov, 2017 13 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Let `SaturatingSemaphore::try_wait` be non-`const` and add `ready`. For internal API consistency. Reviewed By: magedm Differential Revision: D6450089 fbshipit-source-id: 65b9b723672521710a69719b192eb2922a27b778
-
Igor Sugak authored
Summary: Add preprocessor checks to guard jemalloc headers if any sanitizer is enabled. Reviewed By: yfeldblum Differential Revision: D6441578 fbshipit-source-id: 85364fca5af33c95cd05f232d1e3f9cbac9a4120
-
Yedidya Feldblum authored
Summary: [Folly] Some fixes for custom conversions of enums. Of note, `to` was defined for enum -> all conversions, including enum -> string conversions, but we actually want enum -> string conversions to be done via ADL-discovered toAppend. Reviewed By: ot Differential Revision: D6411250 fbshipit-source-id: 852b64309e6adf1c68e5153635cb29632e2d86d4
-
Maged Michael authored
Summary: SaturatingSemaphore is a flag that allows: - multiple concurrent posters - multiple concurrent waiters - idempotent posting - non-destructive waiting - blocking and spinning - pre-block spin time control ``` /// SaturatingSemaphore is a flag that allows concurrent posting by /// multiple posters and concurrent non-destructive waiting by /// multiple waiters. /// /// A SaturatingSemaphore allows one or more waiter threads to check, /// spin, or block, indefinitely or with timeout, for a flag to be set /// by one or more poster threads. By setting the flag, posters /// announce to waiters (that may be already waiting or will check /// the flag in the future) that some condition is true. Posts to an /// already set flag are idempotent. ``` Reviewed By: djwatson Differential Revision: D6379704 fbshipit-source-id: 59aed76caa2d159639e75425a778a9c63f18f375
-
Igor Sugak authored
Summary: Most of the time we want to guard some code when any of the sanitizers are enabled not just one. Reviewed By: yfeldblum Differential Revision: D6429720 fbshipit-source-id: 7157a0a13f2b2acabd36a19c61b9fdbf38ba96b8
-
Adam Simpkins authored
Summary: Add a method for merging the settings from two LogConfig objects. This allows LogConfig objects to be merged before applying them to the LoggerDB. The effects are the same as two sequential LoggerDB::updateConfig() calls, but without having to apply the intermediate state to the LoggerDB. Reviewed By: bolinfest Differential Revision: D6342085 fbshipit-source-id: 0f8a1b7d8d195a80bc74342444dd3152d331fcb6
-
Adam Simpkins authored
Summary: Add a static_assert() to check that the FLAG_INHERIT bit does not conflict with valid LogLevel values. Reviewed By: bolinfest Differential Revision: D6341242 fbshipit-source-id: cec284623c8a612a3c54f1b593d169310790616e
-
Adam Simpkins authored
Summary: The logging code used to support a LogLevel::ERROR value on non-Windows platforms. I removed it in D5288600 to make all platforms consistent, but I forgot to remove this comment describing it. Reviewed By: bolinfest Differential Revision: D6341244 fbshipit-source-id: 054427d342066f354c859b12611b907dc2d4fa35
-
Adam Simpkins authored
Summary: Add methods for applying config changes from a LogConfig object to the LoggerDB. Reviewed By: bolinfest Differential Revision: D6200564 fbshipit-source-id: a25eb99e84b2885bf6853e2222db0d7432a6c37b
-
Adam Simpkins authored
Summary: Add a method to get the current LogConfig state from the LoggerDB. Reviewed By: bolinfest Differential Revision: D6200596 fbshipit-source-id: 3bc57d498a5d25d19099d861376d71ea9f7e4039
-
Adam Simpkins authored
Summary: Remove the logic that clamps the log level to DFATAL in debug builds. This behavior logically makes some sense, but results in subtle and potentially confusing behavior changes. It seems confusing that after calling `setLevel(LogLevel::MAX_LEVEL)` on a log category, calling `getLevel()` on that object would return `DFATAL` rather than `MAX_LEVEL`. We also weren't clamping the level to DFATAL consistently: `setLevel()` would clamp the value, but on construction the initial level was still set to MAX_LEVEL rather than DFATAL. This resulted in some issues when implementing `LoggerDB::getConfig()` since we could not consistently detect if a log category was using the default level settings. Rather than fix this inconsistency it seems better to simply remove this clamping behavior. This means that it is possible for users to disable DFATAL log messages even in debug builds if they really want to. Previously this was only allowed in release builds. This protection doesn't really seem all that valuable--presumably most developers won't really want to do this, and if they really do request this configuration it doesn't seem all that bad to honor it. Reviewed By: bolinfest, yfeldblum Differential Revision: D6200569 fbshipit-source-id: 83ef8e2e4d3b61bc5b105038cbe3132979e9ac67
-
Adam Simpkins authored
Summary: Add a method to LogHandler to return its current configuration. This will make it possible to query the LoggerDB for its current configuration state. Reviewed By: bolinfest Differential Revision: D6200563 fbshipit-source-id: 2b8b9752bbeb26c8aac28d1a73b7e2312fd198c8
-
Adam Simpkins authored
Summary: Update the LoggerDB to track a list of LogHandlers by name, and LogHandlerFactories by handler type. This will be needed to support updating the LoggerDB configuration from a LogConfig object. Reviewed By: bolinfest Differential Revision: D6200562 fbshipit-source-id: e365b4e0df65aa5aaa34e118eb3cee9c9c45cb05
-
- 29 Nov, 2017 4 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] Synchronize coupled caches in `folly::threadlocal_detail::StaticMeta`. The caches should be set together, and only together, because they are coupled. This prevents bugs where one function that sets one cache but not the other cache is inlined into the caller in one module, and another function that reads both caches is inlined into the caller in another module. Reviewed By: djwatson Differential Revision: D6435175 fbshipit-source-id: 846c4972b40e525f2c04da6e6609c2ad54f674c0
-
Adam Simpkins authored
Summary: Add a new LogHandlerFactory interface for creating LogHandler objects from a LogHandlerConfig. Also add an initial FileHandlerFactory implementation capable of creating LogHandler objects that write to a file descriptor. Reviewed By: bolinfest Differential Revision: D6200567 fbshipit-source-id: 14b86fc14ad475223aa4b57d45c40638b48c7594
-
Andrii Nakryiko authored
Summary: Just testing that ElfFile returns expected error code and message for non-ELF files. Depends on D6410210 Reviewed By: yfeldblum Differential Revision: D6418365 fbshipit-source-id: aaab3b9f3ca1a12d384ae98a1772b7f640115192
-
Sarang Masti authored
Summary: We need to keep LockedPtr returned by rlock/wlock alive for the entire duration of the loop. Else we are working on a snapshot of the data structure, which might not be what we want. Reviewed By: aary, ot, luciang Differential Revision: D6426613 fbshipit-source-id: 294c0a7b9d756f3116d5cdb3a7b3678f693e0754
-
- 28 Nov, 2017 6 commits
-
-
Adam Simpkins authored
Summary: Replace all assert() checks in the folly logging code with FOLLY_SAFE_DCHECK(). Reviewed By: yfeldblum Differential Revision: D6422885 fbshipit-source-id: 5cb12dd59f2fe5d346f15b9d317abede8654a879
-
Alexander Kabaev authored
Summary: _mm_cvtsi64_si128 and _mm_cvtsi128_si64 intrinsics are available on x86_64 only, so do not enable SSE instructions when compiling for 32 bits. Reviewed By: yfeldblum Differential Revision: D6422271 fbshipit-source-id: a3c5cf3f2ee4b47d5a1edcf93cfff3d1f3fe907e
-
Yedidya Feldblum authored
Summary: [Folly] Remove some custom test `main()`'s in `folly/experimental/symbolizer/`. In one of the two cases, we need to do some extra work to give `ElfFile` knowledge of the program path. Reviewed By: ot, Orvid, philippv, luciang Differential Revision: D6420517 fbshipit-source-id: 11c694a8342abb6fff05c368f3cda2e6287ccb4b
-
Pingjia Shan authored
Summary: This seems to fix issue in the attached task. `context_` is set in `scheduleTimeout()` and never gets reset. So when an AsyncTimeout object is held across requests by objects like `IOThreadPool0` in I/O Thread Pool used by wangle/acceptor/ConnectionManager, RequestContext object created for the last request is leaked until `IOThreadPool0` handles another request and overrides `context_`. In the issue described in attached task, unit test has single request, next request never comes in, RequestContext doesn't end until test service stops, logging feature relying on RequestContext dtor doesn't get called in time, and thus unit test fails. Reviewed By: yfeldblum Differential Revision: D6402268 fbshipit-source-id: 200c6d358dfa6d7d9aa68ab05f6f1c7f4117b0ec
-
Adam Simpkins authored
Summary: Use FOLLY_SAFE_DCHECK() rather than assert() to avoid compiler errors about this variable being unused in builds where assert() statements are disabled. Reviewed By: bolinfest, yfeldblum Differential Revision: D6421978 fbshipit-source-id: ab1019fa1fa420856e1bf3bc39c441662c4efd75
-
Tom Jackson authored
Summary: Now that we're using C++14 more broadly, we should use it to improve generator performance. This speeds up a microbenchmark >5x by removing type erasure. Reviewed By: philippv Differential Revision: D6398730 fbshipit-source-id: 5809058a3b5ff0e66fd4b1e8954698944e1a7d09
-
- 27 Nov, 2017 4 commits
-
-
Xiangyu Bu authored
Summary: When loading cert/key pair, order matters: (a) Wrong key will fail to load if a cert is loaded; (b) Wrong cert will succeed to load even if a private key is loaded. So this diff adds: (1) SSLContext::checkPrivateKey() -- must call for case (b). (2) SSLContext::loadCertKeyPairFromBufferPEM() -- use this if one loads both cert and key. Guaranteed to throw if cert/key mismatch. Reviewed By: yfeldblum Differential Revision: D6416280 fbshipit-source-id: 8ae370883d46e9b5afb69c506c09fbf7ba82b1b9
-
Andrii Nakryiko authored
Summary: ElfFile in init() assumes file is long enough to contain complete ElfHeader, which is 64 bytes long. This is not true for valid non-ELF files like short scripts. They shouldn't cause crash. Reviewed By: myreg Differential Revision: D6410210 fbshipit-source-id: 28fd017d8de17c431d7d006a1655ade8a95994bd
-
Dave Watson authored
Summary: Use newest hazptr hotness in concurrenthashmap. Shaves ~10% off of the single-thread find performance. Reviewed By: magedm Differential Revision: D6259947 fbshipit-source-id: 7ecf99d38fdf8e311fca3313137e0fca5af3f165
-
Bin Liu authored
Summary: This would save some function calls and reduce code size if we know we will use jemalloc. Reviewed By: yfeldblum Differential Revision: D6411810 fbshipit-source-id: 9db471678e473945f5f00354c0a1285ecdb91de6
-
- 26 Nov, 2017 1 commit
-
-
Giuseppe Ottaviano authored
Summary: Move `folly::hasher` closer to feature parity with `std::hash`. This is in order to replace some instances of `folly::hash::hash_combine(...)` with `folly::Hash()(...)` (`std::hash` is the identity for integers, which makes it an unsafe default for more sophisticated hash data structures, including open-addressing hash tables). The implementation is similar to `libstdc++`'s implementation, in that we handle separately the `0` case, because `0` and `-0` have different binary representations but are equal according to `operator==`, and hash the bytes otherwise. It is probably a little faster than `libstdc++`'s implementation, that delegates a out-of-line Murmur hash routine for arbitrary buffers, while this uses a minimal inlineable machine word hashing routine. Reviewed By: yfeldblum Differential Revision: D6410713 fbshipit-source-id: 86d9e4ed8da04fffe283949825852e539ec7d5cf
-