Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions pathwaysutils/experimental/gke/jobset.py
Original file line number Diff line number Diff line change
Expand Up @@ -882,6 +882,25 @@ def add_user_workload(
)
_apply_container_kwargs(user_container, container_kwargs)

volume_mounts = list(user_container.volume_mounts or [])
if not any(
getattr(vm, "mount_path", None) == "/dev/shm"
or (isinstance(vm, Mapping) and vm.get("mountPath") == "/dev/shm")
for vm in volume_mounts
):
shm_volume_name = "dshm"
self._add_volume_to_pod_spec(
pod_spec,
client.V1Volume(
name=shm_volume_name,
empty_dir=client.V1EmptyDirVolumeSource(medium="Memory"),
),
)
volume_mounts.append(
client.V1VolumeMount(name=shm_volume_name, mount_path="/dev/shm")
)
user_container.volume_mounts = volume_mounts

init_containers = list(pod_spec.init_containers or [])
containers = []
for c in pod_spec.containers:
Expand Down
28 changes: 28 additions & 0 deletions pathwaysutils/test/experimental/gke/jobset_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -1130,6 +1130,34 @@ def test_add_user_workload(self):
self.assertNotIn("pathways-proxy", helper.containers["pathways-head"])
self.assertIn("user-workload", helper.containers["pathways-head"])

# Verify memory-backed /dev/shm emptyDir volume and mount on user-workload
head_volumes = helper.pod_specs["pathways-head"]["volumes"]
self.assertIn(
{"name": "dshm", "emptyDir": {"medium": "Memory"}},
head_volumes,
)
self.assertIn(
{"name": "dshm", "mountPath": "/dev/shm"},
user_c["volumeMounts"],
)

def test_add_user_workload_custom_shm_mount_skips_default_dshm(self):
pw_jobset = self._create_jobset(topology="2x2", num_slices=1)
pw_jobset.add_user_workload(
image="us-docker.pkg.dev/my-project/test:v1",
command=["python3", "test.py"],
volume_mounts=[
client.V1VolumeMount(name="custom-shm", mount_path="/dev/shm")
],
)
helper = JobSetManifestHelper(pw_jobset.to_dict())
self.assertNotIn("dshm", helper.volumes["pathways-head"])
user_c = helper.containers["pathways-head"]["user-workload"]
self.assertEqual(
user_c["volumeMounts"],
[{"name": "custom-shm", "mountPath": "/dev/shm"}],
)

def test_add_user_workload_roundtrip(self):
pw_jobset = self._create_jobset(topology="2x2", num_slices=1)
pw_jobset.add_user_workload(
Expand Down
Loading