Commit a7c84c39 authored by Katie Mancini's avatar Katie Mancini Committed by Facebook GitHub Bot

Exend XLOG_EVERY_N use

Summary:
the n argument in XLOG_EVERY_N is not captured by it's lambda, so
expressions using local variables can not be passed as n. EdenFS has
a use case where we would like to use local variables here. We want to use a
dynamic config value for n, so that we can easily adjust how often we log
see: D25505654.

It seems like it should be ok to capture the n here, but I am by no means a
macro expert, so please let me know if there is a tricky cpp thing here lurking
that makes capturing n bad.

Reviewed By: simpkins

Differential Revision: D25551033

fbshipit-source-id: e82fa465823d3d2ee2ac26924cc4a93b7b7242dd
parent e127df07
......@@ -274,6 +274,7 @@ TEST_F(XlogTest, perFileCategoryHandling) {
}
TEST_F(XlogTest, rateLimiting) {
auto SEVEN = 7;
auto handler = make_shared<TestLogHandler>();
LoggerDB::get().getCategory("xlog_test")->addHandler(handler);
LoggerDB::get().setLevel("xlog_test", LogLevel::DBG1);
......@@ -295,6 +296,15 @@ TEST_F(XlogTest, rateLimiting) {
"msg 49"));
handler->clearMessages();
for (size_t n = 0; n < 50; ++n) {
XLOG_EVERY_N(DBG1, SEVEN + 1, "msg ", n);
}
EXPECT_THAT(
handler->getMessageValues(),
ElementsAre(
"msg 0", "msg 8", "msg 16", "msg 24", "msg 32", "msg 40", "msg 48"));
handler->clearMessages();
// Test XLOG_EVERY_N_EXACT
for (size_t n = 0; n < 50; ++n) {
XLOG_EVERY_N_EXACT(DBG1, 7, "msg ", n);
......@@ -312,6 +322,15 @@ TEST_F(XlogTest, rateLimiting) {
"msg 49"));
handler->clearMessages();
for (size_t n = 0; n < 50; ++n) {
XLOG_EVERY_N_EXACT(DBG1, SEVEN + 1, "msg ", n);
}
EXPECT_THAT(
handler->getMessageValues(),
ElementsAre(
"msg 0", "msg 8", "msg 16", "msg 24", "msg 32", "msg 40", "msg 48"));
handler->clearMessages();
// Test XLOG_EVERY_N_THREAD
for (size_t n = 0; n < 50; ++n) {
XLOG_EVERY_N_THREAD(DBG1, 7, "msg ", n);
......@@ -329,6 +348,15 @@ TEST_F(XlogTest, rateLimiting) {
"msg 49"));
handler->clearMessages();
for (size_t n = 0; n < 50; ++n) {
XLOG_EVERY_N_THREAD(DBG1, SEVEN + 1, "msg ", n);
}
EXPECT_THAT(
handler->getMessageValues(),
ElementsAre(
"msg 0", "msg 8", "msg 16", "msg 24", "msg 32", "msg 40", "msg 48"));
handler->clearMessages();
// Test XLOG_EVERY_MS and XLOG_N_PER_MS
// We test these together to minimize the number of sleep operations.
for (size_t n = 0; n < 10; ++n) {
......
......@@ -141,7 +141,7 @@ FOLLY_EXPORT FOLLY_ALWAYS_INLINE bool xlogEveryNImpl(size_t n) {
#define XLOG_EVERY_N(level, n, ...) \
XLOG_IF( \
level, \
[] { \
[&] { \
struct folly_detail_xlog_tag {}; \
return ::folly::detail::xlogEveryNImpl<folly_detail_xlog_tag>(n); \
}(), \
......@@ -172,7 +172,7 @@ FOLLY_EXPORT FOLLY_ALWAYS_INLINE bool xlogEveryNExactImpl(size_t n) {
#define XLOG_EVERY_N_EXACT(level, n, ...) \
XLOG_IF( \
level, \
[] { \
[&] { \
struct folly_detail_xlog_tag {}; \
return ::folly::detail::xlogEveryNExactImpl<folly_detail_xlog_tag>(n); \
}(), \
......@@ -212,7 +212,7 @@ FOLLY_EXPORT FOLLY_ALWAYS_INLINE bool xlogEveryNThreadImpl(size_t n) {
#define XLOG_EVERY_N_THREAD(level, n, ...) \
XLOG_IF( \
level, \
[] { \
[&] { \
struct folly_detail_xlog_tag {}; \
return ::folly::detail::xlogEveryNThreadImpl<folly_detail_xlog_tag>( \
n); \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment