compare containers rather than SAS urls when building worksets (#418)

By comparing container names rather than SAS urls, this removes a race condition that prevented co-locatable tasks from being co-located.
This commit is contained in:
bmc-msft
2021-01-08 04:45:05 -05:00
committed by GitHub
parent e799eb03cd
commit 46e8454569

View File

@ -9,6 +9,7 @@ from uuid import UUID, uuid4
from onefuzztypes.enums import OS, PoolState, TaskState from onefuzztypes.enums import OS, PoolState, TaskState
from onefuzztypes.models import WorkSet, WorkUnit from onefuzztypes.models import WorkSet, WorkUnit
from onefuzztypes.primitives import Container
from pydantic import BaseModel from pydantic import BaseModel
from ..azure.containers import blob_exists, get_container_sas_url from ..azure.containers import blob_exists, get_container_sas_url
@ -102,7 +103,7 @@ def bucket_tasks(tasks: List[Task]) -> Dict[Tuple, List[Task]]:
class BucketConfig(BaseModel): class BucketConfig(BaseModel):
count: int count: int
reboot: bool reboot: bool
setup_url: str setup_container: Container
setup_script: Optional[str] setup_script: Optional[str]
pool: Pool pool: Pool
@ -118,10 +119,6 @@ def build_work_unit(task: Task) -> Optional[Tuple[BucketConfig, WorkUnit]]:
task_config = build_task_config(task.job_id, task.task_id, task.config) task_config = build_task_config(task.job_id, task.task_id, task.config)
setup_container = get_setup_container(task.config) setup_container = get_setup_container(task.config)
setup_url = get_container_sas_url(
setup_container, StorageType.corpus, read=True, list=True
)
setup_script = None setup_script = None
if task.os == OS.windows and blob_exists( if task.os == OS.windows and blob_exists(
@ -165,7 +162,7 @@ def build_work_unit(task: Task) -> Optional[Tuple[BucketConfig, WorkUnit]]:
count=count, count=count,
reboot=reboot, reboot=reboot,
setup_script=setup_script, setup_script=setup_script,
setup_url=setup_url, setup_container=setup_container,
) )
return bucket_config, work_unit return bucket_config, work_unit
@ -201,10 +198,14 @@ def build_work_set(tasks: List[Task]) -> Optional[Tuple[BucketConfig, WorkSet]]:
work_units.append(work_unit) work_units.append(work_unit)
if bucket_config: if bucket_config:
setup_url = get_container_sas_url(
bucket_config.setup_container, StorageType.corpus, read=True, list=True
)
work_set = WorkSet( work_set = WorkSet(
reboot=bucket_config.reboot, reboot=bucket_config.reboot,
script=(bucket_config.setup_script is not None), script=(bucket_config.setup_script is not None),
setup_url=bucket_config.setup_url, setup_url=setup_url,
work_units=work_units, work_units=work_units,
) )
return (bucket_config, work_set) return (bucket_config, work_set)