File size: 2,681 Bytes
e1acc15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""CPU-only launch preflight: replay skipping requires UP2's pinned scheduler mount."""
from __future__ import annotations

import hashlib
import json
import os
from pathlib import Path, PurePosixPath
import shlex
from typing import cast

from offload.upstream_adopt.build_overlay import Manifest, PREFIX, ROOT

SCHEDULER = 'vllm/v1/core/sched/scheduler.py'
SOURCE = 'offload/upstream_adopt/overlay/' + SCHEDULER
DESTINATION = PREFIX + SCHEDULER


def verify(overlays: str, extra_args: str = '', root: Path = ROOT) -> None:
    """Reject absent, replaced, shadowed or tampered scheduler before remote work."""
    matching: list[str] = []
    destination = PurePosixPath(DESTINATION)
    for pair in overlays.split():
        source, separator, target = pair.partition('=')
        if not separator:
            raise ValueError(f'UP2 replay scheduler guard: malformed overlay {pair!r}')
        mount = PurePosixPath(target)
        if mount == destination:
            matching.append(source)
        elif mount in destination.parents:
            raise ValueError(f'UP2 replay scheduler guard: shadowing scheduler mount {target}')
    if matching != [SOURCE]:
        raise ValueError('UP2 replay scheduler guard: REPLAY=1 requires exactly the UP2 scheduler mount; '
                         'image/SO2 schedulers do not compose with replay skipping')
    # Extra raw Docker mounts could replace this scheduler or its parent after
    # the reviewed OVERLAYS list. Require every replay mount to use OVERLAYS.
    raw = iter(shlex.split(extra_args))
    for arg in raw:
        # K1's existing transport directory is outside the Python package tree.
        if arg == '-v':
            mount_arg = next(raw, '')
            if mount_arg == '$HOME/dsv41-offload-run/ofl:/opt/dsv41-ofl:ro':
                continue
            raise ValueError('UP2 replay scheduler guard: raw Docker mounts require review; use OVERLAYS')
        if arg in ('-v', '--volume', '--mount') or arg.startswith(('-v', '--volume=', '--mount=')):
            raise ValueError('UP2 replay scheduler guard: raw Docker mounts require review; use OVERLAYS')
    manifest = cast(Manifest, json.loads((root/'offload/upstream_adopt/MANIFEST.json').read_text()))
    expected = [entry['sha256'] for entry in manifest['files'] if entry['path'] == SCHEDULER]
    actual = hashlib.sha256((root/SOURCE).read_bytes()).hexdigest()
    if expected != [actual]:
        raise ValueError('UP2 replay scheduler guard: scheduler hash differs from UP2 manifest; rebuild/review')


def main() -> None:
    verify(os.environ.get('OVERLAYS', ''), os.environ.get('EXTRA_DOCKER_ARGS', ''))


if __name__ == '__main__':
    main()