class_docstr: Provide python APIs for job submission and management.
  
  It does not provide persistence, all info will be lost if the cluster
  goes down.
docstr: Handle the result of starting a job supervisor actor.
  
  If started successfully, result should be None. Otherwise it should be
  an Exception.
  
  On failure, the job will be marked failed with a relevant error
  message.
docstr_tok: ["Handle","the","result","of","starting","a","job","supervisor","actor",".","If","started","successfully",",","result","should","be","None",".","Otherwise","it","should","be","an","Exception",".","On","failure",",","the","job","will","be","marked","failed","with","a","relevant","error","message","."]
code: def _handle_supervisor_startup(
      self, job_id: str, result: Optional[Exception]
  ):
      """Handle the result of starting a job supervisor actor.
  
      If started successfully, result should be None. Otherwise it should be
      an Exception.
  
      On failure, the job will be marked failed with a relevant error
      message.
      """
      if result is None:
          return
  
imports: import asyncio
  import copy
  import json
  import logging
  import os
  import psutil
  import random
  import signal
  import string
  import subprocess
  import sys
  import time
  import traceback
  from asyncio.tasks import FIRST_COMPLETED
  from collections import deque
  from typing import Any, Dict, Iterator, List, Optional, Tuple, Union
  from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy, SchedulingStrategyT
  import ray
  from ray._private.gcs_utils import GcsAioClient
  from ray._private.utils import run_background_task
  import ray._private.ray_constants
  from ray._private.runtime_env.constants import RAY_JOB_CONFIG_JSON_ENV_VAR
  from ray.actor import ActorHandle
  from ray.dashboard.consts import RAY_JOB_ALLOW_DRIVER_ON_WORKER_NODES_ENV_VAR, DEFAULT_JOB_START_TIMEOUT_SECONDS, RAY_JOB_START_TIMEOUT_SECONDS_ENV_VAR
  from ray.dashboard.modules.job.common import JOB_ID_METADATA_KEY, JOB_NAME_METADATA_KEY, JOB_ACTOR_NAME_TEMPLATE, JOB_LOGS_PATH_TEMPLATE, SUPERVISOR_ACTOR_RAY_NAMESPACE, JobInfo, JobInfoStorageClient
  from ray.dashboard.modules.job.utils import file_tail_iterator
  from ray.exceptions import ActorUnschedulableError, RuntimeEnvSetupError
  from ray.job_submission import JobStatus
  from ray._private.event.event_logger import get_event_logger
  from ray.core.generated.event_pb2 import Event
label_desc: Use image node_id 3 for calling the JobManager obj's underlying member method code with example usage: obj._handle_supervisor_startup(job_id, result) without return types