Skip to content

Commit 6b1f23b

Browse files
janezhang10meta-codesync[bot]
authored andcommitted
Fix takeover recovery test teardown under TSan
Summary: Drive the recovered thrift server in the takeover recovery tests before tearing down the `EdenServer`. `performCleanup()` returns false after a failed takeover and relies on the main Eden loop to call `serve()` again so `createThriftServer()` can complete. The tests were skipping that production step, leaving detached recovery work live during object destruction. Reviewed By: genevievehelsel Differential Revision: D116107409 fbshipit-source-id: 72f2560d90f832d8b2130c39ad9c7035476af2a0
1 parent 95bda85 commit 6b1f23b

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

eden/fs/service/test/EdenServerTest.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,11 @@ TEST_F(EdenServerTest, TakeoverSendFailureRecoversDuringCleanup) {
340340
auto originalHandler = server.getHandler();
341341
ASSERT_NO_FATAL_FAILURE(
342342
driveTakeoverSendFailureToCleanup(testServer(), server));
343-
EXPECT_FALSE(server.performCleanup());
343+
ASSERT_FALSE(server.performCleanup());
344+
ScopedServerThread serverThread{server};
345+
ASSERT_TRUE(driveMainEventBaseUntil(server, [&] {
346+
return server.getStatus() == EdenServer::RunState::RUNNING;
347+
}));
344348
EXPECT_NE(originalHandler, server.getHandler());
345349
}
346350

@@ -354,6 +358,11 @@ TEST_F(EdenServerTest, TakeoverSendFailureRecoveryReinitializesMountd) {
354358
driveTakeoverSendFailureToCleanup(nfsTestServer, server));
355359
ASSERT_FALSE(server.performCleanup());
356360

361+
ScopedServerThread serverThread{server};
362+
ASSERT_TRUE(driveMainEventBaseUntil(server, [&] {
363+
return server.getStatus() == EdenServer::RunState::RUNNING;
364+
}));
365+
357366
std::thread recoveryEventBaseThread(
358367
[&server] { server.getMainEventBase()->loop(); });
359368
auto stopRecoveryLoop = folly::makeGuard([&] {

0 commit comments

Comments
 (0)