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}}, }); }