mongo/jstests/noPassthrough/rseq_linux_compatibility/rseq_kernel_compatibility_check.js
Guillaume Racicot 08e0c4612b SERVER-122576 Make kernel 6.19 crash more graceful than status quo (#51045)
GitOrigin-RevId: e67138ffda9f90b59531128bc43678bb5ad105ed
2026-04-30 03:44:30 +00:00

88 lines
2.8 KiB
JavaScript

/**
* This test checks if mongod correctly crash on startup on linux 6.19 with
* tcmalloc per-CPU cache.
*
* @tags: [requires_kernel_619]
*/
const gracefulExitLogID = 12257600;
const findGracefulExitLogLine = new RegExp(`"id":${gracefulExitLogID}`);
function checkGracefulExitOnIncompatibleEnv(conn) {
const exitCode = waitProgram(conn.pid);
assert.eq(exitCode, 1, `Expected server to exit with code 1, got ${exitCode}`);
assert(
rawMongoProgramOutput(".*").search(findGracefulExitLogLine) >= 0,
`Expected fatal log message with ID ${gracefulExitLogID} in server output`,
);
}
function checkGracefulExitOnCompatibleEnv(conn) {
const exitCode = waitProgram(conn.pid);
assert.eq(exitCode, 0, `Expected server to exit with code 0, got ${exitCode}`);
assert(
rawMongoProgramOutput(".*").search(findGracefulExitLogLine) === -1,
`Unexpected fatal log message with ID ${gracefulExitLogID} in server output`,
);
}
function testMongodPerCPUCacheEnabled() {
clearRawMongoProgramOutput();
const conn = MongoRunner.runMongod({
env: {GLIBC_TUNABLES: "glibc.pthread.rseq=0"},
waitForConnect: false,
setParameter: {
"failpoint.shutdownAtStartup": '{mode:"alwaysOn"}',
},
});
checkGracefulExitOnIncompatibleEnv(conn);
}
function testMongodPerCPUCacheDisabled() {
clearRawMongoProgramOutput();
const conn = MongoRunner.runMongod({
env: {GLIBC_TUNABLES: "glibc.pthread.rseq=1"},
waitForConnect: false,
setParameter: {
"failpoint.shutdownAtStartup": '{mode:"alwaysOn"}',
},
});
checkGracefulExitOnCompatibleEnv(conn);
}
function testMongosPerCPUCacheEnabled() {
const configRS = new ReplSetTest({nodes: 1});
configRS.startSet({configsvr: "", env: {GLIBC_TUNABLES: "glibc.pthread.rseq=1"}});
configRS.initiate();
clearRawMongoProgramOutput();
const conn = MongoRunner.runMongos({
configdb: configRS.getURL(),
env: {GLIBC_TUNABLES: "glibc.pthread.rseq=0"},
waitForConnect: false,
setParameter: {
"failpoint.shutdownAtStartup": '{mode:"alwaysOn"}',
},
});
checkGracefulExitOnIncompatibleEnv(conn);
configRS.stopSet();
}
function testMongosPerCPUCacheDisabled() {
const configRS = new ReplSetTest({nodes: 1});
configRS.startSet({configsvr: "", env: {GLIBC_TUNABLES: "glibc.pthread.rseq=1"}});
configRS.initiate();
clearRawMongoProgramOutput();
const conn = MongoRunner.runMongos({
configdb: configRS.getURL(),
env: {GLIBC_TUNABLES: "glibc.pthread.rseq=1"},
});
conn.getDB('admin').shutdownServer();
checkGracefulExitOnCompatibleEnv(conn);
configRS.stopSet();
}
testMongodPerCPUCacheEnabled();
testMongodPerCPUCacheDisabled();
testMongosPerCPUCacheEnabled();
testMongosPerCPUCacheDisabled();