Skip to content

Commit b87bdce

Browse files
authored
Add log to analyze FuzzTargetJob entity deletion (#5051)
The cleanup cronjob is failing for Internal due to a `FuzzTargetJob` query timeout, and the discussion in b/418807403 indicates that the issue may be related to the deletion of `FuzzTargetJob` entities. This PR adds a log to help confirm if deletion is the main problem, which will be useful for developing an appropriate solution. Key changes: - Added a log to indicate how many `FuzzTargetJob` entities are deleted per cronjob and how many remain in the database. - Transformed the query iterator into a list to log the remaining entities. This may increase memory usage, but it should not be a problem as this kind has around 5,000 entities. Related to b/418807403 and b/406250205.
1 parent e0ab729 commit b87bdce

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/clusterfuzz/_internal/cron/cleanup.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,18 +208,28 @@ def cleanup_unused_fuzz_targets_and_jobs():
208208
unused_target_jobs = data_types.FuzzTargetJob.query(
209209
data_types.FuzzTargetJob.last_run < last_run_cutoff)
210210
# The order by last_run DESC filter is from b/418807403
211-
valid_target_jobs = data_types.FuzzTargetJob.query(
212-
data_types.FuzzTargetJob.last_run >= last_run_cutoff).order(
213-
-data_types.FuzzTargetJob.last_run)
211+
valid_target_jobs = list(
212+
data_types.FuzzTargetJob.query(
213+
data_types.FuzzTargetJob.last_run >= last_run_cutoff).order(
214+
-data_types.FuzzTargetJob.last_run))
214215

215216
to_delete = [t.key for t in unused_target_jobs]
217+
num_fuzz_target_jobs_to_delete = len(to_delete)
218+
219+
logs.info(
220+
f'{len(to_delete)} FuzzTargetJob entities are marked for deletion and'
221+
f'{len(valid_target_jobs)} are considered valid.')
216222

217223
valid_fuzz_targets = {t.fuzz_target_name for t in valid_target_jobs}
218224
for fuzz_target in ndb_utils.get_all_from_model(data_types.FuzzTarget):
219225
if fuzz_target.fully_qualified_name() not in valid_fuzz_targets:
220226
to_delete.append(fuzz_target.key)
221227

222228
ndb_utils.delete_multi(to_delete)
229+
logs.info(
230+
f'Deleted {num_fuzz_target_jobs_to_delete} FuzzTargetJob entities and '
231+
f'{len(to_delete) - num_fuzz_target_jobs_to_delete} FuzzTarget entities. '
232+
f'{len(valid_target_jobs)} valid FuzzTargetJob entities remain.')
223233

224234

225235
def get_jobs_and_platforms_for_project():

src/clusterfuzz/_internal/datastore/data_handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1775,7 +1775,7 @@ def record_fuzz_targets(engine_name, binaries, job_type):
17751775
jobs = get_or_create_multi_entities_from_keys(job_mapping)
17761776

17771777
for job in jobs:
1778-
# TODO(metzman): Decide if we want to handle unused fuzzers differentlyo.
1778+
# TODO(metzman): Decide if we want to handle unused fuzzers differently.
17791779
job.last_run = utils.utcnow()
17801780

17811781
ndb_utils.put_multi(jobs)

0 commit comments

Comments
 (0)