code: def test_plan_retry_error_max_failed_runs(
      failed_runs: int, max_failed_runs: int, should_create: bool
  ) -> None:
      with patch("libcommon.state.MAX_FAILED_RUNS", max_failed_runs):
          processing_graph = PROCESSING_GRAPH_GENEALOGY
          error_code = list(ERROR_CODES_TO_RETRY)[0]
          compute_all(processing_graph=processing_graph)
  
          put_cache(
              step=STEP_DA,
              dataset=DATASET_NAME,
              revision=REVISION_NAME,
              error_code=error_code,
              failed_runs=failed_runs,
          )
          dataset_backfill_plan = get_dataset_backfill_plan(
              processing_graph=processing_graph
          )
          cache_is_error_to_retry = (
              [ARTIFACT_DA] if should_create else []
          )
          assert_dataset_backfill_plan(
              dataset_backfill_plan=dataset_backfill_plan,
              config_names=[],
              cache_status={
                  "cache_is_error_to_retry": cache_is_error_to_retry,
              },
              queue_status={"in_process": []},
              tasks=[f"CreateJobs,{1 + len(cache_is_error_to_retry)}"],
          )
  
imports: from datetime import datetime
  from typing import Optional
  from unittest.mock import patch
  import pytest
  from libcommon.constants import ERROR_CODES_TO_RETRY
  from libcommon.processing_graph import ProcessingGraph
  from libcommon.queue import Queue
  from libcommon.resources import CacheMongoResource, QueueMongoResource
  from libcommon.utils import Priority, Status
  from .utils import ARTIFACT_CA_1, ARTIFACT_CA_2, ARTIFACT_CB_1, ARTIFACT_CB_2, ARTIFACT_DA, ARTIFACT_DA_OTHER_REVISION, ARTIFACT_DB, ARTIFACT_DC, ARTIFACT_DD, ARTIFACT_DE, ARTIFACT_DF, ARTIFACT_DG, ARTIFACT_DH, ARTIFACT_DI, ARTIFACT_SA_1_1, ARTIFACT_SA_1_2, ARTIFACT_SA_2_1, ARTIFACT_SA_2_2, CONFIG_NAME_1, CONFIG_NAMES, DATASET_NAME, DIFFICULTY, OTHER_REVISION_NAME, PROCESSING_GRAPH_FAN_IN_OUT, PROCESSING_GRAPH_GENEALOGY, PROCESSING_GRAPH_ONE_STEP, PROCESSING_GRAPH_PARALLEL, REVISION_NAME, SPLIT_NAME_1, SPLIT_NAMES, STEP_CA, STEP_DA, STEP_DD, STEP_DI, STEP_SA, assert_dataset_backfill_plan, compute_all, get_dataset_backfill_plan, process_all_jobs, process_next_job, put_cache
label_desc: Use image node_id 9 for calling a global function with example usage: test_plan_retry_error_max_failed_runs(failed_runs, max_failed_runs, should_create) without return types