Skip to content
This repository was archived by the owner on Jun 20, 2025. It is now read-only.

Commit bff3d8f

Browse files
Andrew Zhuangfacebook-github-bot
authored andcommitted
Fix bug in runner where server ips are not gotten if stage is retried (#1330)
Summary: Pull Request resolved: #1330 ## What * always get the server_ips when running a joint stage ## Why * if a joint stage was retried and had STARTED status, no server ips would be gotten, causing an error Reviewed By: jrodal98 Differential Revision: D38054016 fbshipit-source-id: 9c0ac7867e9c1d576d21e37f5fbc559983d0fcee
1 parent 6f68f81 commit bff3d8f

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

fbpcs/bolt/bolt_runner.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -141,22 +141,22 @@ async def run_next_stage(
141141
publisher_status = (
142142
await self.publisher_client.update_instance(publisher_id)
143143
).pc_instance_status
144-
server_ips = None
145144
if publisher_status not in [stage.started_status, stage.completed_status]:
146145
# don't retry if started or completed status
147146
self.logger.info(f"Publisher {publisher_id} starting stage {stage.name}.")
148147
await self.publisher_client.run_stage(instance_id=publisher_id, stage=stage)
149-
if stage.is_joint_stage:
150-
server_ips = await self.get_server_ips_after_start(
151-
instance_id=publisher_id,
152-
stage=stage,
153-
timeout=stage.timeout,
154-
poll_interval=poll_interval,
148+
server_ips = None
149+
if stage.is_joint_stage:
150+
server_ips = await self.get_server_ips_after_start(
151+
instance_id=publisher_id,
152+
stage=stage,
153+
timeout=stage.timeout,
154+
poll_interval=poll_interval,
155+
)
156+
if server_ips is None:
157+
raise NoServerIpsException(
158+
f"{stage.name} requires server ips but got none."
155159
)
156-
if server_ips is None:
157-
raise NoServerIpsException(
158-
f"{stage.name} requires server ips but got none."
159-
)
160160
partner_status = (
161161
await self.partner_client.update_instance(partner_id)
162162
).pc_instance_status

fbpcs/bolt/test/test_bolt_runner.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,34 @@ async def test_non_joint_stage(
121121
server_ips=None,
122122
)
123123

124+
@mock.patch("fbpcs.bolt.bolt_runner.asyncio.sleep")
125+
async def test_joint_stage_retry_gets_ips(self, mock_sleep) -> None:
126+
# test that server ips are gotten when a joint stage is retried with STARTED status
127+
# specifically, publisher status STARTED and partner status FAILED
128+
server_ips = ["1.1.1.1"]
129+
self.test_runner.get_server_ips_after_start = mock.AsyncMock(
130+
return_value=server_ips
131+
)
132+
self.test_runner.publisher_client.update_instance = mock.AsyncMock(
133+
return_value=BoltState(DummyJointStageFlow.JOINT_STAGE.started_status)
134+
)
135+
self.test_runner.partner_client.update_instance = mock.AsyncMock(
136+
return_value=BoltState(DummyJointStageFlow.JOINT_STAGE.failed_status)
137+
)
138+
mock_partner_run_stage = mock.AsyncMock()
139+
self.test_runner.partner_client.run_stage = mock_partner_run_stage
140+
await self.test_runner.run_next_stage(
141+
publisher_id="publisher_id",
142+
partner_id="partner_id",
143+
stage=DummyJointStageFlow.JOINT_STAGE,
144+
poll_interval=5,
145+
)
146+
mock_partner_run_stage.assert_called_once_with(
147+
instance_id="partner_id",
148+
stage=DummyJointStageFlow.JOINT_STAGE,
149+
server_ips=server_ips,
150+
)
151+
124152
@mock.patch("fbpcs.bolt.bolt_runner.asyncio.sleep")
125153
@mock.patch("fbpcs.bolt.bolt_job.BoltPlayerArgs")
126154
@mock.patch("fbpcs.bolt.bolt_job.BoltPlayerArgs")

0 commit comments

Comments
 (0)