ExportXMLWordPrintableJSON

    • Type: Improvement
    • Resolution: Unresolved
    • Priority: Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • None
    • Query Execution
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      Description

      As part of SERVER-130333 (process-wide memory admission control), three resmoke suites (aggregation_memory_admission, core_memory_admission, concurrency_memory_admission) were prototyped to run the existing corpuses against a mongod with memory admission enabled. They were removed before merge because they were written for the earlier pool-based, spilling design, were never wired into an Evergreen task, and lacked a reservation-leak assertion. This ticket tracks doing it properly for the current single-threshold, RSS-driven load-shedding design.

      Motivation / what's not yet covered

      The jstests/noPassthrough/admission suite and the C++ unit tests validate the admission decision logic in isolation (via the memoryAdmissionControlPressureOverridePercent knob). They do not exercise the always-on parts of the subsystem against the real query surface:

      • reserve()/release() run on every memory-tracked operation and must balance exactly (no accounting leak/underflow);
      • per-stage reservation checkpoints fire across every query shape;
      • the shared reservation atomics are hit concurrently under load.

      A passthrough that runs the broad corpuses with admission active is the cheapest way to get that integration coverage.

      Scope

      1. Add resmoke suite(s) running jstests/aggregation, jstests/core, and the concurrency (FSM) workloads against a standalone mongod with memory admission enabled but the pressure signal held below the limit (deterministic, non-shedding: memoryAdmissionControlMonitorEnabled: false, memoryAdmissionControlPressureOverridePercent: 0, small memoryAdmissionReservationChunkBytes) so the corpus stays green while the reservation/checkpoint plumbing is exercised.
      2. Add a between-tests reservation-leak assertion (hook or CleanEveryN-style check) that serverStatus().queues.memory.inUseBytes returns to 0 when no operations are running – otherwise the "no leak" guarantee is unverified.
      3. Wire the suite(s) into an Evergreen build variant/task so they actually run in CI (the prototypes never were).
      4. (Optional / stretch) A deterministic corpus-wide shedding-stress variant. This requires a "tolerate MemoryAdmissionExceeded" override – the current implicitly_retry_on_overload_errors.js retries then returns the error, so sustained shedding fails result-asserting tests. Only pursue if we want corpus-wide rejection-path coverage beyond the targeted noPassthrough tests.

      Acceptance criteria

      • Suite(s) run green in Evergreen with memory admission enabled.
      • Reservation-leak assertion is enforced between tests and passes.
      • Suite(s) are referenced by at least one build variant.

      Related

      SERVER-130333. The removed prototypes were on branch dgomezferro-starzia/memory-admission (removal commit 720557d4349).

            Assignee:
            Unassigned
            Reporter:
            Steve Tarzia
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: