70 lines
2.5 KiB
JavaScript
70 lines
2.5 KiB
JavaScript
import {FixtureHelpers} from "jstests/libs/fixture_helpers.js";
|
|
|
|
/**
|
|
* Asserts that releaseMemory command failed for a given cursor with the appropriate code.
|
|
*/
|
|
export function assertReleaseMemoryFailedWithCode(result, cursorId, codes) {
|
|
if (!Array.isArray(codes)) {
|
|
codes = [codes];
|
|
}
|
|
if (!result.hasOwnProperty("cursorsWithErrors")) {
|
|
doassert("Command result does not contain 'cursorsWithErrors' field: " + tojson(result));
|
|
}
|
|
for (const releaseMemoryError of result.cursorsWithErrors) {
|
|
if (releaseMemoryError.cursorId.compare(cursorId) === 0) {
|
|
assert.contains(
|
|
releaseMemoryError.status.code,
|
|
codes,
|
|
"the following release memory error contains an unexpected error code: " +
|
|
tojson(releaseMemoryError));
|
|
return;
|
|
}
|
|
}
|
|
doassert("Cursor " + tojsononeline(cursorId) +
|
|
" did not fail during release memory. Full command result: " + tojson(result));
|
|
}
|
|
|
|
/**
|
|
* Asserts that releaseMemory command worked for a given cursor.
|
|
*/
|
|
export function assertReleaseMemoryWorked(result, cursorId) {
|
|
if (!result.hasOwnProperty("cursorsReleased")) {
|
|
doassert("Command result does not contain 'cursorsReleased' field: " + tojson(result));
|
|
}
|
|
for (const releaseMemoryOk of result.cursorsReleased) {
|
|
if (releaseMemoryOk.compare(cursorId) === 0) {
|
|
return;
|
|
}
|
|
}
|
|
doassert("Releasing memory from cursor " + tojsononeline(cursorId) +
|
|
" did not succeed during release memory. Full command result: " + tojson(result));
|
|
}
|
|
|
|
/**
|
|
* Accumulate metric from a server status
|
|
*/
|
|
export function accumulateServerStatusMetric(db, metricGetter) {
|
|
return retryOnRetryableError(() => {
|
|
let total = 0;
|
|
FixtureHelpers.mapOnEachShardNode({
|
|
db: db,
|
|
func: (db) => {
|
|
const serverStatus = db.serverStatus();
|
|
if (!serverStatus.hasOwnProperty("metrics")) {
|
|
return;
|
|
}
|
|
total += metricGetter(serverStatus.metrics);
|
|
}
|
|
});
|
|
return total;
|
|
}, 10, 100, [ErrorCodes.InterruptedDueToStorageChange]);
|
|
}
|
|
|
|
// Sets the mode of the simulateAvailableDiskSpace failpoint.
|
|
export function setAvailableDiskSpaceMode(db, mode, bytes = 450 * 1024 * 1024) {
|
|
FixtureHelpers.runCommandOnEachPrimary({
|
|
db: db,
|
|
cmdObj: {configureFailPoint: 'simulateAvailableDiskSpace', mode, 'data': {bytes: bytes}}
|
|
});
|
|
}
|