Skip to content

Commit 4b2405b

Browse files
Chandhana Solainathanmeta-codesync[bot]
authored andcommitted
telemetry: Add structured error logging to Overlay layer
Summary: Adds structured error logging to the Overlay layer. Threads ErrorLogger through the Overlay layer so that Overlay error handlers can log to perfpipe_edenfs_errors. Reviewed By: vilatto Differential Revision: D105073787 fbshipit-source-id: 719a74474b4708c71af61ba751210c2e3baa2082
1 parent 0b4b407 commit 4b2405b

13 files changed

Lines changed: 110 additions & 5 deletions

eden/fs/inodes/EdenMount.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ EdenMount::EdenMount(
281281
getInodeCatalogType(inodeCatalogType),
282282
getInodeCatalogOptions(inodeCatalogOptions),
283283
serverState_->getEdenFsEventsLogger(),
284+
serverState_->getErrorLogger(),
284285
std::move(stats),
285286
*serverState_->getEdenConfig())},
286287
#ifndef _WIN32

eden/fs/inodes/Overlay.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ std::shared_ptr<Overlay> Overlay::create(
184184
InodeCatalogType inodeCatalogType,
185185
InodeCatalogOptions inodeCatalogOptions,
186186
std::shared_ptr<EdenFsEventsLogger> logger,
187+
ErrorLogger& errorLogger,
187188
EdenStatsPtr stats,
188189
const EdenConfig& config) {
189190
// This allows us to access the private constructor.
@@ -194,6 +195,7 @@ std::shared_ptr<Overlay> Overlay::create(
194195
InodeCatalogType inodeCatalogType,
195196
InodeCatalogOptions inodeCatalogOptions,
196197
std::shared_ptr<EdenFsEventsLogger> logger,
198+
ErrorLogger& errorLogger,
197199
EdenStatsPtr stats,
198200
const EdenConfig& config)
199201
: Overlay(
@@ -202,6 +204,7 @@ std::shared_ptr<Overlay> Overlay::create(
202204
inodeCatalogType,
203205
inodeCatalogOptions,
204206
logger,
207+
errorLogger,
205208
std::move(stats),
206209
config) {}
207210
};
@@ -211,6 +214,7 @@ std::shared_ptr<Overlay> Overlay::create(
211214
inodeCatalogType,
212215
inodeCatalogOptions,
213216
logger,
217+
errorLogger,
214218
std::move(stats),
215219
config);
216220
}
@@ -221,6 +225,7 @@ Overlay::Overlay(
221225
InodeCatalogType inodeCatalogType,
222226
InodeCatalogOptions inodeCatalogOptions,
223227
std::shared_ptr<EdenFsEventsLogger> logger,
228+
ErrorLogger& errorLogger,
224229
EdenStatsPtr stats,
225230
const EdenConfig& config)
226231
: fileContentStore_{makeFileContentStore(
@@ -242,6 +247,7 @@ Overlay::Overlay(
242247
localDir_{localDir},
243248
caseSensitive_{caseSensitive},
244249
edenFsEventsLogger_{std::move(logger)},
250+
errorLogger_(errorLogger),
245251
stats_{std::move(stats)},
246252
useDirectFileWrites_(config.overlayDirectFileWrites.getValue()),
247253
useWal_{config.overlayUseWal.getValue() && inodeCatalog_->supportsWal()},

eden/fs/inodes/Overlay.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class FileContentStore;
5353
class DirEntry;
5454
class EdenConfig;
5555
class EdenStats;
56+
class ErrorLogger;
5657

5758
using EdenStatsPtr = RefPtr<EdenStats>;
5859

@@ -96,6 +97,7 @@ class Overlay : public std::enable_shared_from_this<Overlay> {
9697
InodeCatalogType inodeCatalogType,
9798
InodeCatalogOptions inodeCatalogOptions,
9899
std::shared_ptr<EdenFsEventsLogger> logger,
100+
ErrorLogger& errorLogger,
99101
EdenStatsPtr stats,
100102
const EdenConfig& config);
101103

@@ -353,6 +355,10 @@ class Overlay : public std::enable_shared_from_this<Overlay> {
353355
return localDir_;
354356
}
355357

358+
ErrorLogger& getErrorLogger() const {
359+
return errorLogger_;
360+
}
361+
356362
void setFsckSemaphore(folly::LifoSem* sem) {
357363
fsckSemaphore_ = sem;
358364
}
@@ -381,6 +387,7 @@ class Overlay : public std::enable_shared_from_this<Overlay> {
381387
InodeCatalogType inodeCatalogType,
382388
InodeCatalogOptions inodeCatalogOptions,
383389
std::shared_ptr<EdenFsEventsLogger> logger,
390+
ErrorLogger& errorLogger,
384391
EdenStatsPtr stats,
385392
const EdenConfig& config);
386393

@@ -598,6 +605,9 @@ class Overlay : public std::enable_shared_from_this<Overlay> {
598605
CaseSensitivity caseSensitive_;
599606

600607
std::shared_ptr<EdenFsEventsLogger> edenFsEventsLogger_;
608+
// Borrowed from ServerState. Valid for Overlay's lifetime because
609+
// ServerState outlives all EdenMount instances.
610+
ErrorLogger& errorLogger_;
601611
EdenStatsPtr stats_;
602612

603613
// Borrowed from EdenServer. Valid for Overlay's lifetime because

eden/fs/inodes/fscatalog/test/EphemeralFsOverlayTest.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class EphemeralFsOverlayTest : public ::testing::Test {
5050
InodeCatalogType::LegacyEphemeral,
5151
INODE_CATALOG_DEFAULT,
5252
makeTestEdenFsEventsLogger(),
53+
/*errorLogger=*/noopErrorLogger_,
5354
makeRefPtr<EdenStats>(),
5455
*edenConfig);
5556
overlay
@@ -62,6 +63,7 @@ class EphemeralFsOverlayTest : public ::testing::Test {
6263
}
6364

6465
folly::test::TemporaryDirectory testDir;
66+
ErrorLogger noopErrorLogger_ = makeTestErrorLogger();
6567
std::shared_ptr<Overlay> overlay;
6668
};
6769

eden/fs/inodes/lmdbcatalog/test/LMDBOverlayTest.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,14 @@ INSTANTIATE_TEST_SUITE_P(
7878

7979
TEST(PlainLMDBOverlayTest, new_overlay_is_clean) {
8080
folly::test::TemporaryDirectory testDir;
81+
auto noopErrorLogger = makeTestErrorLogger();
8182
auto overlay = Overlay::create(
8283
canonicalPath(testDir.path().string()),
8384
kPathMapDefaultCaseSensitive,
8485
InodeCatalogType::LMDB,
8586
INODE_CATALOG_DEFAULT,
8687
makeTestEdenFsEventsLogger(),
88+
/*errorLogger=*/noopErrorLogger,
8789
makeRefPtr<EdenStats>(),
8890
*EdenConfig::createTestEdenConfig());
8991
overlay
@@ -96,12 +98,14 @@ TEST(PlainLMDBOverlayTest, new_overlay_is_clean) {
9698

9799
TEST(PlainLMDBOverlayTest, new_overlay_is_clean_buffered) {
98100
folly::test::TemporaryDirectory testDir;
101+
auto noopErrorLogger = makeTestErrorLogger();
99102
auto overlay = Overlay::create(
100103
canonicalPath(testDir.path().string()),
101104
kPathMapDefaultCaseSensitive,
102105
InodeCatalogType::LMDB,
103106
INODE_CATALOG_BUFFERED,
104107
makeTestEdenFsEventsLogger(),
108+
/*errorLogger=*/noopErrorLogger,
105109
makeRefPtr<EdenStats>(),
106110
*EdenConfig::createTestEdenConfig());
107111
overlay
@@ -114,13 +118,15 @@ TEST(PlainLMDBOverlayTest, new_overlay_is_clean_buffered) {
114118

115119
TEST(PlainLMDBOverlayTest, reopened_overlay_is_clean) {
116120
folly::test::TemporaryDirectory testDir;
121+
auto noopErrorLogger = makeTestErrorLogger();
117122
{
118123
auto overlay = Overlay::create(
119124
canonicalPath(testDir.path().string()),
120125
kPathMapDefaultCaseSensitive,
121126
InodeCatalogType::LMDB,
122127
INODE_CATALOG_DEFAULT,
123128
makeTestEdenFsEventsLogger(),
129+
/*errorLogger=*/noopErrorLogger,
124130
makeRefPtr<EdenStats>(),
125131
*EdenConfig::createTestEdenConfig());
126132
overlay
@@ -135,6 +141,7 @@ TEST(PlainLMDBOverlayTest, reopened_overlay_is_clean) {
135141
InodeCatalogType::LMDB,
136142
INODE_CATALOG_DEFAULT,
137143
makeTestEdenFsEventsLogger(),
144+
/*errorLogger=*/noopErrorLogger,
138145
makeRefPtr<EdenStats>(),
139146
*EdenConfig::createTestEdenConfig());
140147
overlay
@@ -147,13 +154,15 @@ TEST(PlainLMDBOverlayTest, reopened_overlay_is_clean) {
147154

148155
TEST(PlainLMDBOverlayTest, reopened_overlay_is_clean_buffered) {
149156
folly::test::TemporaryDirectory testDir;
157+
auto noopErrorLogger = makeTestErrorLogger();
150158
{
151159
auto overlay = Overlay::create(
152160
canonicalPath(testDir.path().string()),
153161
kPathMapDefaultCaseSensitive,
154162
InodeCatalogType::LMDB,
155163
INODE_CATALOG_BUFFERED,
156164
makeTestEdenFsEventsLogger(),
165+
/*errorLogger=*/noopErrorLogger,
157166
makeRefPtr<EdenStats>(),
158167
*EdenConfig::createTestEdenConfig());
159168
overlay
@@ -168,6 +177,7 @@ TEST(PlainLMDBOverlayTest, reopened_overlay_is_clean_buffered) {
168177
InodeCatalogType::LMDB,
169178
INODE_CATALOG_BUFFERED,
170179
makeTestEdenFsEventsLogger(),
180+
/*errorLogger=*/noopErrorLogger,
171181
makeRefPtr<EdenStats>(),
172182
*EdenConfig::createTestEdenConfig());
173183
overlay
@@ -182,12 +192,14 @@ TEST(PlainLMDBOverlayTest, close_overlay_with_no_capacity_buffered) {
182192
auto config = EdenConfig::createTestEdenConfig();
183193
config->overlayBufferSize.setValue(0, ConfigSourceType::Default, true);
184194
folly::test::TemporaryDirectory testDir;
195+
auto noopErrorLogger = makeTestErrorLogger();
185196
auto overlay = Overlay::create(
186197
canonicalPath(testDir.path().string()),
187198
kPathMapDefaultCaseSensitive,
188199
InodeCatalogType::LMDB,
189200
INODE_CATALOG_BUFFERED,
190201
makeTestEdenFsEventsLogger(),
202+
/*errorLogger=*/noopErrorLogger,
191203
makeRefPtr<EdenStats>(),
192204
*config);
193205
overlay
@@ -203,12 +215,14 @@ TEST(PlainLMDBOverlayTest, small_capacity_write_multiple_directories_buffered) {
203215
auto config = EdenConfig::createTestEdenConfig();
204216
config->overlayBufferSize.setValue(1, ConfigSourceType::Default, true);
205217
folly::test::TemporaryDirectory testDir;
218+
auto noopErrorLogger = makeTestErrorLogger();
206219
auto overlay = Overlay::create(
207220
canonicalPath(testDir.path().string()),
208221
kPathMapDefaultCaseSensitive,
209222
InodeCatalogType::LMDB,
210223
INODE_CATALOG_BUFFERED,
211224
makeTestEdenFsEventsLogger(),
225+
/*errorLogger=*/noopErrorLogger,
212226
makeRefPtr<EdenStats>(),
213227
*config);
214228
overlay
@@ -261,6 +275,7 @@ class RawLMDBOverlayTest
261275
InodeCatalogType::LMDB,
262276
overlayOptions(),
263277
makeTestEdenFsEventsLogger(),
278+
/*errorLogger=*/noopErrorLogger_,
264279
makeRefPtr<EdenStats>(),
265280
*EdenConfig::createTestEdenConfig());
266281
overlay
@@ -275,6 +290,7 @@ class RawLMDBOverlayTest
275290
}
276291

277292
folly::test::TemporaryDirectory testDir_;
293+
ErrorLogger noopErrorLogger_ = makeTestErrorLogger();
278294
std::shared_ptr<Overlay> overlay;
279295
};
280296

@@ -441,6 +457,7 @@ class DebugDumpLMDBOverlayInodesTest
441457
InodeCatalogType::LMDB,
442458
overlayOptions(),
443459
makeTestEdenFsEventsLogger(),
460+
/*errorLogger=*/noopErrorLogger_,
444461
makeRefPtr<EdenStats>(),
445462
*EdenConfig::createTestEdenConfig());
446463
overlay
@@ -464,6 +481,7 @@ class DebugDumpLMDBOverlayInodesTest
464481
}
465482

466483
folly::test::TemporaryDirectory testDir_;
484+
ErrorLogger noopErrorLogger_ = makeTestErrorLogger();
467485
std::shared_ptr<Overlay> overlay;
468486
};
469487

eden/fs/inodes/sqlitecatalog/test/SqliteInodeCatalogTest.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,14 @@ INSTANTIATE_TEST_SUITE_P(
7979

8080
TEST(PlainSqliteInodeCatalogTest, new_overlay_is_clean) {
8181
folly::test::TemporaryDirectory testDir;
82+
auto noopErrorLogger = makeTestErrorLogger();
8283
auto overlay = Overlay::create(
8384
canonicalPath(testDir.path().string()),
8485
kPathMapDefaultCaseSensitive,
8586
InodeCatalogType::Sqlite,
8687
kDefaultInodeCatalogOptions,
8788
makeTestEdenFsEventsLogger(),
89+
/*errorLogger=*/noopErrorLogger,
8890
makeRefPtr<EdenStats>(),
8991
*EdenConfig::createTestEdenConfig());
9092
overlay
@@ -97,12 +99,14 @@ TEST(PlainSqliteInodeCatalogTest, new_overlay_is_clean) {
9799

98100
TEST(PlainSqliteInodeCatalogTest, new_overlay_is_clean_buffered) {
99101
folly::test::TemporaryDirectory testDir;
102+
auto noopErrorLogger = makeTestErrorLogger();
100103
auto overlay = Overlay::create(
101104
canonicalPath(testDir.path().string()),
102105
kPathMapDefaultCaseSensitive,
103106
InodeCatalogType::Sqlite,
104107
INODE_CATALOG_BUFFERED,
105108
makeTestEdenFsEventsLogger(),
109+
/*errorLogger=*/noopErrorLogger,
106110
makeRefPtr<EdenStats>(),
107111
*EdenConfig::createTestEdenConfig());
108112
overlay
@@ -115,13 +119,15 @@ TEST(PlainSqliteInodeCatalogTest, new_overlay_is_clean_buffered) {
115119

116120
TEST(PlainSqliteInodeCatalogTest, reopened_overlay_is_clean) {
117121
folly::test::TemporaryDirectory testDir;
122+
auto noopErrorLogger = makeTestErrorLogger();
118123
{
119124
auto overlay = Overlay::create(
120125
canonicalPath(testDir.path().string()),
121126
kPathMapDefaultCaseSensitive,
122127
InodeCatalogType::Sqlite,
123128
kDefaultInodeCatalogOptions,
124129
makeTestEdenFsEventsLogger(),
130+
/*errorLogger=*/noopErrorLogger,
125131
makeRefPtr<EdenStats>(),
126132
*EdenConfig::createTestEdenConfig());
127133
overlay
@@ -136,6 +142,7 @@ TEST(PlainSqliteInodeCatalogTest, reopened_overlay_is_clean) {
136142
InodeCatalogType::Sqlite,
137143
kDefaultInodeCatalogOptions,
138144
makeTestEdenFsEventsLogger(),
145+
/*errorLogger=*/noopErrorLogger,
139146
makeRefPtr<EdenStats>(),
140147
*EdenConfig::createTestEdenConfig());
141148
overlay
@@ -148,13 +155,15 @@ TEST(PlainSqliteInodeCatalogTest, reopened_overlay_is_clean) {
148155

149156
TEST(PlainSqliteInodeCatalogTest, reopened_overlay_is_clean_buffered) {
150157
folly::test::TemporaryDirectory testDir;
158+
auto noopErrorLogger = makeTestErrorLogger();
151159
{
152160
auto overlay = Overlay::create(
153161
canonicalPath(testDir.path().string()),
154162
kPathMapDefaultCaseSensitive,
155163
InodeCatalogType::Sqlite,
156164
INODE_CATALOG_BUFFERED,
157165
makeTestEdenFsEventsLogger(),
166+
/*errorLogger=*/noopErrorLogger,
158167
makeRefPtr<EdenStats>(),
159168
*EdenConfig::createTestEdenConfig());
160169
overlay
@@ -169,6 +178,7 @@ TEST(PlainSqliteInodeCatalogTest, reopened_overlay_is_clean_buffered) {
169178
InodeCatalogType::Sqlite,
170179
INODE_CATALOG_BUFFERED,
171180
makeTestEdenFsEventsLogger(),
181+
/*errorLogger=*/noopErrorLogger,
172182
makeRefPtr<EdenStats>(),
173183
*EdenConfig::createTestEdenConfig());
174184
overlay
@@ -183,12 +193,14 @@ TEST(PlainSqliteInodeCatalogTest, close_overlay_with_no_capacity_buffered) {
183193
auto config = EdenConfig::createTestEdenConfig();
184194
config->overlayBufferSize.setValue(0, ConfigSourceType::Default, true);
185195
folly::test::TemporaryDirectory testDir;
196+
auto noopErrorLogger = makeTestErrorLogger();
186197
auto overlay = Overlay::create(
187198
canonicalPath(testDir.path().string()),
188199
kPathMapDefaultCaseSensitive,
189200
InodeCatalogType::Sqlite,
190201
INODE_CATALOG_BUFFERED,
191202
makeTestEdenFsEventsLogger(),
203+
/*errorLogger=*/noopErrorLogger,
192204
makeRefPtr<EdenStats>(),
193205
*config);
194206
overlay
@@ -206,12 +218,14 @@ TEST(
206218
auto config = EdenConfig::createTestEdenConfig();
207219
config->overlayBufferSize.setValue(1, ConfigSourceType::Default, true);
208220
folly::test::TemporaryDirectory testDir;
221+
auto noopErrorLogger = makeTestErrorLogger();
209222
auto overlay = Overlay::create(
210223
canonicalPath(testDir.path().string()),
211224
kPathMapDefaultCaseSensitive,
212225
InodeCatalogType::Sqlite,
213226
INODE_CATALOG_BUFFERED,
214227
makeTestEdenFsEventsLogger(),
228+
/*errorLogger=*/noopErrorLogger,
215229
makeRefPtr<EdenStats>(),
216230
*config);
217231
overlay
@@ -265,6 +279,7 @@ class RawSqliteInodeCatalogTest
265279
InodeCatalogType::Sqlite,
266280
overlayOptions(),
267281
makeTestEdenFsEventsLogger(),
282+
/*errorLogger=*/noopErrorLogger_,
268283
makeRefPtr<EdenStats>(),
269284
*EdenConfig::createTestEdenConfig());
270285
overlay
@@ -279,6 +294,7 @@ class RawSqliteInodeCatalogTest
279294
}
280295

281296
folly::test::TemporaryDirectory testDir_;
297+
ErrorLogger noopErrorLogger_ = makeTestErrorLogger();
282298
std::shared_ptr<Overlay> overlay;
283299
};
284300

@@ -445,6 +461,7 @@ class DebugDumpSqliteInodeCatalogInodesTest
445461
InodeCatalogType::Sqlite,
446462
overlayOptions(),
447463
makeTestEdenFsEventsLogger(),
464+
/*errorLogger=*/noopErrorLogger_,
448465
makeRefPtr<EdenStats>(),
449466
*EdenConfig::createTestEdenConfig());
450467
overlay
@@ -468,6 +485,7 @@ class DebugDumpSqliteInodeCatalogInodesTest
468485
}
469486

470487
folly::test::TemporaryDirectory testDir_;
488+
ErrorLogger noopErrorLogger_ = makeTestErrorLogger();
471489
std::shared_ptr<Overlay> overlay;
472490
};
473491

0 commit comments

Comments
 (0)