@@ -123,37 +123,31 @@ def _shard_service_checker_classes(
123123 * ,
124124 task_index : int ,
125125 task_count : int ,
126- checkers_per_task : int ,
127126) -> list [type [BaseServiceChecker ]]:
128127 """Shard service checker classes for a Cloud Run Job task.
129128
130129 Args:
131130 service_checker_classes: All checker classes sorted in deterministic order.
132131 task_index: The zero-based Cloud Run Job task index.
133132 task_count: The total number of Cloud Run Job tasks for this execution.
134- checkers_per_task: Maximum number of checkers in each shard batch.
135133
136134 Returns:
137135 The checker classes assigned to this task.
138136
139137 Raises:
140- RuntimeError: If there are not enough Cloud Run tasks for the configured batch size.
141- ValueError: If `task_count` or `checkers_per_task` is not positive.
138+ ValueError: If `task_count` is not positive.
142139 """
143140 if task_count <= 0 :
144141 raise ValueError ("task_count must be greater than 0." )
145- if checkers_per_task <= 0 :
146- raise ValueError ("checkers_per_task must be greater than 0." )
147142
148- required_task_count = (len (service_checker_classes ) + checkers_per_task - 1 ) // checkers_per_task
149- if task_count < required_task_count :
150- raise RuntimeError (
151- f"Cloud Run task count ({ task_count } ) is too small for { len (service_checker_classes )} service checkers "
152- f"with checkers_per_task={ checkers_per_task } . Increase task_count to at least { required_task_count } ."
153- )
143+ total_checker_count = len (service_checker_classes )
144+ base_shard_size = total_checker_count // task_count
145+ remainder = total_checker_count % task_count
154146
155- start = task_index * checkers_per_task
156- end = start + checkers_per_task
147+ # Distribute the remainder one-by-one to the first tasks for an even split.
148+ shard_size = base_shard_size + (1 if task_index < remainder else 0 )
149+ start = task_index * base_shard_size + min (task_index , remainder )
150+ end = start + shard_size
157151 return list (service_checker_classes [start :end ])
158152
159153
@@ -180,20 +174,16 @@ def _resolve_service_checker_classes(
180174 return service_checker_classes
181175
182176 task_index , task_count = task_metadata
183- settings = get_settings ()
184- checkers_per_task = max (1 , settings .checker_task_batch_size )
185177 sharded_service_checker_classes = _shard_service_checker_classes (
186178 service_checker_classes ,
187179 task_index = task_index ,
188180 task_count = task_count ,
189- checkers_per_task = checkers_per_task ,
190181 )
191182
192183 logger .info (
193184 "checker_job.task_shard_assigned" ,
194185 cloud_run_task_index = task_index ,
195186 cloud_run_task_count = task_count ,
196- checkers_per_task = checkers_per_task ,
197187 total_checker_count = len (service_checker_classes ),
198188 assigned_checker_count = len (sharded_service_checker_classes ),
199189 )
0 commit comments